Rubyのクラスとモジュールは同じもの

Rubyを覚えるときは、「Rubyにはクラスとモジュールというものがある」と考えるより、「Rubyのクラスとモジュールは(ほとんど)同じもの」と考えるほうが分かりやすいんじゃないかなあ、という気がしてきました。

クラスとモジュールの違いは、次の5つくらい。これ以外はいっしょ。

  • クラスはclass 名前 〜 endで定義する。モジュールはmodule 名前 〜 end で定義する。
  • クラスは継承できる。モジュールはできない。
  • クラスはインスタンスを作成(new)できる。モジュールはできない。
  • モジュールはMixinに使える(include, extendの引数に渡せる)、クラスはMixinに使えない。
  • クラスはClassクラスのオブジェクト、モジュールはModuleクラスのオブジェクト。

「モジュールはクラスの一種」とか「モジュールは特殊なクラス」と考えるのがいいのではないか。ClassクラスはModuleクラスのサブクラスではありますが。