チェリー本:インスタンスメソッドとクラスメソッド

クラス内で特に意識せずにメソッドを定義すると、それはインスタンスメソッドになる。インスタンスメソッドは各インスタンスに含まれるデータを読み書きするような場合に定義する。 一方、クラスに関係は深いが、各インスタンスのデータを使わないメソッドを定義したい場合には、self.をつけてクラスメソッドを定義する。

具体的な使い方例は、下記が紹介されていた。

class User
  def initialize(name)
    @name = name
  end

  # .selfをつけてクラスメソッドを定義
  def self.create_users(names)
    names.map do |name|
      User.new(name)
    end
  end

  # インスタンスメソッドを定義
  def hello
    "Hello, I am #{@name}."
  end
end

names = ['Alice', 'Bob']
users = User.create_users(names)
users.each do |user|
  puts user.hello
end
# => Hello, I am Alice.
# => Hello, I am Bob.