塩焼きブログ

塩焼きに関しての研究内容を公開しています

Rubyのクラスメソッド・インスタンスメソッド・関数的メソッドについて

レシーバーがインスタンスではなくクラスであればクラスメソッドと呼ぶ。例ではTimeがクラスであり、nowがクラスメソッドに該当する。

puts Time.now.to_s

自作したものを例とするとhello_messageがクラスメソッドに該当する。

class Message
  class << self
    def hello_message(name)
      "Hello #{name}"
    end
  end
end
puts Message.hello_message("Jane")

インスタンスメソッドはオブジェクトをレシーバとするメソッドのこと。例ではarrがレシーバでありjoinインスタンスメソッドに該当する。

arr = ["This", "is", "a", "pen"]
puts arr.join(" ")

自作したものを例とするとhelloインスタンスメソッドに該当する。

class Message
  def initialize(name)
    @name = name
  end
  def hello
    puts "Hello #{@name}"
  end
end
msg = Message.new("Jane")
msg.hello

関数的メソッドとはレシーバがないメソッドのこと。例ではputsが該当する。

puts "Hello world"

自作で作成したメソッドなども同じである。この例におけるexample "Tom"の部分も関数的メソッドと呼べる。

def example(str)
  puts "Hello " + str
end
example "Tom"

自作クラスの中にメソッドを作成する時は、インスタンスメソッドかクラスメソッドを作成すると呼称し、レシーバを必要としない自作メソッドを作成する時は関数的メソッドを作成すると呼称できる。