2011年10月31日月曜日

Ruby の module

scaffold の中身をちょっと掘り下げる第2回目の記事です。
といっても、Ruby における module という言語要素の理解をするためだけの記事なので、本質的には rails / scaffold とは関係ないかもしれません。

modelname_helpers.rb は module として定義されていました。
大学院時代のトラウマ経験のせいで「モジュール」という言葉には過敏に反応してしまいます…。

モジュールという言葉も曖昧な言葉なのですが、個人的によく使っていた定義は「再利用可能なプログラム単位・部品」です。
例えば、java における package や class は上記の定義においてモジュールです。既存の package を import したり、既存の class の extend することでプログラムの再利用をしています。

Ruby の module は include という形でプログラムの再利用を行います。任意の class で
include ModuleName
とすることで、その module で定義されたインスタンスメソッドや定数などを使えるようです。
公式ドキュメントではない(?)ですが、Programming RubyのWeb版でちょっと触れられているのを見つけました。

class と module

この辺りについて書きたいことはあるけれど、何か難しく考えてるだけのような気がします。
ざっくり言うと、
  • class は(class だけに)分類を行ってその共通部分を抽象化する(スーパークラスにする)
  • 分類から漏れた・分類にそぐわない共通部分を module として抽象化する(抽象サブクラスにする)
くらいの表現になりそうですが、やっぱり詳しく書くのは止めておきます。

0 件のコメント:

コメントを投稿