インスタンスメソッドとクラスメソッドの呼び出し方
プログラミングにおいて、メソッドの呼び出し方は、そのメソッドがインスタンスメソッドなのか、クラスメソッドなのかによって異なります。ここでは、これらのメソッドをさまざまな状況でどのように呼び出すかについて解説します。
インスタンスメソッドをクラス外で呼び出す
インスタンスメソッドは、クラスのインスタンスを介して呼び出します。まずはクラスのインスタンスを作成し、そのインスタンスを通じてメソッドを呼び出します。
class MyClass
def instance_method
puts "インスタンスメソッドです"
end
end
# インスタンスを生成
my_object = MyClass.new
# インスタンスメソッドを呼び出す
my_object.instance_method
クラスメソッドをクラス外で呼び出す
クラスメソッドは、クラス自体をレシーバとして呼び出します。インスタンスを生成する必要はありません。
class MyClass
def self.class_method
puts "クラスメソッドです"
end
end
# クラスメソッドを呼び出す
MyClass.class_method
インスタンスメソッドから他のインスタンスメソッドを呼び出す
同じインスタンス内の別のインスタンスメソッドを呼び出す場合、レシーバ(self)を省略してメソッド名だけを記述します。
class MyClass
def first_method
puts "最初のメソッド"
second_method
end
def second_method
puts "次のメソッド"
end
end
my_object = MyClass.new
my_object.first_method
クラスメソッドから他のクラスメソッドを呼び出す
クラスメソッドから同じクラスの別のクラスメソッドを呼び出す場合も、レシーバを省略できます。
class MyClass
def self.first_class_method
puts "最初のクラスメソッド"
second_class_method
end
def self.second_class_method
puts "次のクラスメソッド"
end
end
MyClass.first_class_method
インスタンスメソッドからクラスメソッドを呼び出す
インスタンスメソッド内でクラスメソッドを呼び出す場合、クラス名をレシーバとして使用します。
class MyClass
def instance_method
puts "インスタンスメソッドからクラスメソッドを呼び出します"
MyClass.class_method
end
def self.class_method
puts "クラスメソッドです"
end
end
my_object = MyClass.new
my_object.instance_method
クラスメソッドからインスタンスメソッドを呼び出す
クラスメソッドから直接インスタンスメソッドを呼び出すことはできません。インスタンスメソッドは特定のオブジェクトに紐付いているため、まずインスタンスを生成し、そのインスタンスを通じ
てメソッドを呼び出す必要があります。
モジュールをインスタンスメソッドとして利用する
モジュールをインスタンスメソッドとして利用する場合は、includeメソッドを利用します。
module MyModule
def module_method
puts "モジュール内のメソッドです。"
end
end
class MyClass
include MyModule
end
my_object = MyClass.new
my_object.module_method
モジュールをクラスメソッドとして利用する
モジュールをクラスメソッドとして利用する場合は、extendメソッドを利用します。
module MyModule
def module_method
puts "モジュール内のメソッドです。"
end
end
class MyClass
extend MyModule
end
my_object = MyClass.module_method
モジュールメソッドをモジュール外で呼び出す
モジュールメソッドは、モジュール自体をレシーバとして呼び出します。インスタンスを生成する事はできません。
module MyModule
def self.module_method
puts "モジュールメソッドです。"
end
end
my_object = MyModule.module_method
モジュール内のクラスメソッドを呼び出す
モジュール内でクラスメソッドを呼び出す際は、モジュールとモジュール内のクラスを::で結びます。
module MyModule
class MyClass
def self.class_method
puts "クラスメソッドです。"
end
end
end
my_object = MyModule::MyClass.class_method
まとめ
インスタンスメソッドとクラスメソッドは、それぞれ特定の方法で呼び出す必要があります。これらの基本的な使い方を理解することは、効果的なプログラミングのために重要です。クラスとインスタンスの概念を適切に活用し、メソッドの呼び出し方をマスターしましょう。