Rubyモジュールについて
モジュールとは
クラスは実体(データ)と振る舞い(メソッド)を持ちますが、モジュールは振る舞いのみを持ったものといえます。
クラスとの差異としては、以下の点が挙げられます。
・モジュールはインスタンスを持つことができない
・モジュールを継承できない。
モジュールによる名前空間の明示化
メソッド名や変数名が衝突しないように明示化することができます。
メソッドの利用に際しては、「モジュール名.メソッド名」という形式で記述します。
モジュールの作成
モジュール名の先頭文字は大文字である必要があります。
module SampleModule
Definition = "3.0"
def function(var)
# process
end
module_function :function
end
定数
モジュールに定義した定数はモジュール名を経由して参照できます。
print Sample::Definition
メソッド定義
メソッドをモジュール関数として外部公開するためには、「module_function」というシンボルを使用する必要があります。
Mix-in
Mix-inとは
Rubyではモジュールをクラスに混ぜることができ、これをMix-inと呼びます。
簡単にいえば、クラスに機能を混ぜ合わせることで複数のクラスで機能を共有する機能となります。 /
クラス定義内で「include」を記述して、モジュールのメソッドや定数をクラスに取り込みます。
module SampleModule
#処理
end
class SampleClass1
include SampleModule
end
class SampleClass2
include SampleModule
end
Mix-inと継承の違い
継承とは、基底クラスの機能を受け継ぎ、必要に応じて、振る舞いや機能を変更することで、より具体的なクラスを定義することです。
これに対して、Mix-inは「既にある機能を、親子関係にない複数のクラスで共通に利用する」ものです。
Mix-inのメリット
・Rubyで多重継承を実現できる。(Rubyの継承は単一継承です。)
・繰り返し記載する内容を、効率的に書くことができる。変更に強い記載ができる。
関連ページ
- Ruby
- Ruby_よく使うのに忘れてしまう基本文法の備忘録
- Rubyのクラスについて
- Rubyのモジュールについて
- Rubyの例外処理について
- RubyのKCODEについて
- Rubyの__send__について
- Rubyのyieldについて