rubyのクラスメソッドの定義の仕方

最近になってようやく人のソースコードを読むということにチャレンジしています。

そんな時によく出るのが、class << selfというもの

これの意味がわからなくて、詰まっていたので調べてみました。

そもそも、クラスメソッドの定義の仕方が分かればいいので、一個ずつ段階を踏んで書きました。

オーソドックスなパターン

class Helloworld
  def hello
    'hello'
  end
end

hello = Helloworld.new
p hello.hello
=> "hello"

ここでnewをするのがめんどくさいので、次の形式に変更できます。

class Helloworld
  def self.hello
    'hello'
  end
end

p Helloworld.hello
=> "hello"

ここで新しくメソッドを追加する場合に、毎回self.method_nameを書くのはめんどくさいということで、更に進化します。

class Helloworld
  class << self
    def hello
      'hello'
    end

    def goodbye
      'goodbye'
    end
  end
end

p Helloworld.hello
=> 'hello'
p Helloworld.goodbye
=> 'goodbye'

後からメソッドを追加する時は、こんな風に書くことができます。

class << Helloworld
  def say_hello
    p 'hello'
  end
end

Helloworld.say_hello

<< selfの役割が分かれば、使い勝手が良くなりますね。

複数メソッドを定義するのなら、<< selfって書いた方が楽でいいですね。

よく使われる理由がわかりました。