Rubyのメソッドは、その定義の仕方によって様々な呼ばれ方をします。
大きく次の4種類でしょうか。
- 関数的メソッド
- インスタンスメソッド
- クラスメソッド
- 特異メソッド
最近、クラスメソッドと特異メソッドの関係を知ったので、まとめてみます。
関数的メソッド
メソッドの呼び出しにレシーバを必要としないものです。
モジュールのメソッドやプライベートメソッドなどは、関数的メソッドと言えるでしょう。
#関数的メソッドの定義
def test_functional_method
p 'This is functional method.'
end
#レシーバなしで呼び出し
test_functional_method
出力例)
"This is functional method."
インスタンスメソッド
あるクラスのインスタンスメソッドとは、そのクラスのインスタンスをレシーバとして呼び出すことのできるメソッドです。
class ExampleClass
#インスタンスメソッドの定義
def test_instance_method
p 'This is instance method.'
end
end
#ExampleClassのインスタンスから呼び出し
test = ExampleClass.new
test.test_instance_method
出力例)
"This is instance method."
クラスメソッド
クラスメソッドとは、クラス名をレシーバとして呼び出すことのできるメソッドです。
class ExampleClass
#クラスメソッドの定義
def self.test_class_method
p 'This is class method.'
end
end
#ExampleClassから呼び出し
ExampleClass.test_class_method
出力例)
"This is class method."
特異メソッド
特異メソッドは特定のインスタンスにのみ定義されたメソッドで、そのインスタンスをレシーバにして呼び出すことができます。
class ExampleClass
end
test = ExampleClass.new
#特異メソッド の定義
def test.test_singleton_method
p 'This is singleton method.'
end
#メソッドを定義したインスタンスをレシーバとして呼び出し
test.test_singleton_method
出力例)
"This is singleton method."
クラスメソッドは特異メソッド
ここで、クラス名もインスタンスであるから、クラスメソッドはそのクラスに定義された特異メソッドであると言える。
まとめ
- Rubyのメソッドは4種類に分類できる
- クラスメソッドは、そのクラスの特異メソッドとも言える
コメント