プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

クラス定義のネスト

クラスをネストすることの意味

クラス定義のネストはいつ使うべきなのか。 リファレンスマニュアルを読むと以下のように書かれていました。

クラスのネストは、意味的に関連するクラスを外側のクラス/モジュールでひ とまとまりにしたり、包含関係を表すために使用されます。

コードで書くとこんな感じ

module Foo
  class Bar
  end

  class Bar2
  end
end

関連するクラスをFooでまとめています。通常、まとめる際にはモジュールが利用されるそうです。

Barクラスを呼び出すときは以下のように書きます。

bar = Foo::Bar.new

# あるいは
include Foo
bar = Bar.new

モジュールだけでなくクラスでも同じように書ける

クラス定義をネストすることが可能です。

class My
  class SweetClass
  end
end

My.new
My::SweetClass.new

#=>#<My:0x007f88ea0ed8d0>
#=>#<My::SweetClass:0x007f88ea0ed7e0>

また、ネストしたクラスは以下のように書くことも可能です。

class My::GreatClass
end

SweetClassの定義と同じ意味で使用できます。

参考

クラス/メソッドの定義