Rubyでプログラムを記述している際に疑問に思うことが多々あります。
今回はメソッド、クラスメソッド、インスタンスメソッドがあいまいになったのでまとめていきます。
メソッド
クラスメソッドにしてもインスタンスメソッドにしても、メソッドという名称がついているのだからどちらもメソッドです。
では、そもそもメソッドとは何なのでしょうか?
一般には、方法、手法といった意味。オブジェクト指向プログラミングにおいて、クラスにはメソッドとフィールドがあり、メソッドには、処理内容を記述する。
引用元:コトバンク
def addition (a,b,c,d,e)
puts a + b + c + d + e
end
上のadditionメソッドに5つの数字を与えると全部足して表示してくれる。というメソッドです。
**メソッドとは、なにかしらの処理をまとめ、その一連の処理に名前をつけたもの。**を指します。
クラスメソッド?インスタンスメソッド?
クラスメソッドとは、クラスオブジェクトから実行可能なメソッド
インスタンスメソッドとは、クラスのインスタンス(実体)に対して紐づけられるメソッド
引用元:コトバンク
なるほど。さっぱりわかりません。とりあえず先ほどのadditionをCalculation(計算)クラスの中に入れて実行してみます。
class Calculation
def addition(a, b, c, d, e)
puts a + b + c + d + e
end
end
addition(1,2,3,4,5)
実行結果はundefined method `addition' for Add:Class (NoMethodError)
というエラーコードが出ました。
そんなメソッド存在しない。というエラーのようです。
クラスの中にあるメソッドを使用する
Calculationクラスに含まれているメソッドを外から勝手に使用することはできないみたいです。そこで登場するのがクラスメソッドです。
**クラスメソッドの定義はメソッド名の前にself.を加え、呼び出すときにはクラス名.メソッド名で呼び出します。**早速やってみましょう。
class Calculation
def self.addition(a, b, c, d, e)
puts a + b + c + d + e
end
end
Calculation.addition(1,2,3,4,5)
15が出力されました。どうやら成功したようです。
インスタンスメソッドは?
結論から言うとクラスの中にメソッドを作成するとそれがインスタンスメソッドになります。
class クラス名
def メソッド名(変数1, 変数2, ...)
処理
end
end
インスタンスメソッドは、クラスのインスタンスに機能として搭載されているものです。
先ほどの計算クラス(エラー)となってしまったコードは、インスタンスを作り、作ったインスタンスに対してメソッドを呼び出せばエラーを吐きません。
class Calculation
def addition(a, b, c, d, e)
puts a + b + c + d + e
end
end
calculation = Calculation.new()
calculation.addition(1,2,3,4,5)
これで15と表示されるようになった。
まとめ
- メソッドとは、それを実行すると何かしらの処理を行ってくれる
- インスタンスメソッドもクラスメソッドもメソッド
- クラスメソッドはself.メソッド名で作成。使用するにはクラス名.メソッド名で
- インスタンスメソッドはクラスにメソッドを作成するとそれがインスタンスメソッドとなる。特に追加で記述する必要はない
- インスタンスメソッドを使用するにはインスタンスを作成(.new)しなければならない