Rubyにおけるメソッド(分類とか書き方とかの整理)
かなり混乱してきたので調べて整理しました。誤りがあればご指摘お願いします。
●メソッドとは●
オブジェクト指向における「操作」を定義したもの
Rubyでは全ての操作がメソッドとして実装されている
メソッドの実行の流れ
オブジェクトにメッセージを送る → オブジェクトがメッセージを受け取る
そのためメソッドにおけるオブジェクトはレシーバーとも呼ばれる。
●メソッドの分類● ← レシーバーで分類
・インスタンスメソッド
・クラスメソッド
・関数的メソッド
<インスタンスメソッド>
メソッドのレシーバーがインスタンスのとき。いちばんよく見る。
<クラスメソッド>
メソッドのレシーバーがクラスであるとき。
インスタンスを生成するメソッド(クラス名.new)など。
RailsのActiveRecordメソッドも
<関数的メソッド>
レシーバーがない(本当はあるが記述しない)メソッド。putsとか。
●書き方(定義と呼び出し)●
インスタンスメソッドとクラスメソッドについて
〜だめな例〜
class Calculation
def addition(a, b, c) ←これはインスタンスメソッド
puts a + b + c
end
end
addition(1,2,3) ← メソッドを呼び出すときはメソッド名だけ書いても✗
〜正しい書き方①:クラスメソッドとして〜
class Calculation
def self.addition(a, b, c) ← self.メソッド名(仮引数)
puts a + b + c
end
end
Calculation.addition(1,2,3) ← クラス名.メソッド名(実引数)で呼び出し
〜正しい書き方②:インスタンスメソッドとして〜
class Calculation
def addition(a, b, c) ← メソッド名(仮引数)
puts a + b + c
end
end
calculation = Calculation.new ← まずインスタンスを生成
calculation.addition(1,2,3) ← インスタンス名.メソッド名(実引数)で呼び出し
定義や分類については「たのしいRuby 第6版」を参考にしました。
少しすっきり〜!