2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

インスタンスメソッド/クラスメソッド/モジュールの状況別呼び出し方

2
Last updated at Posted at 2023-12-07

インスタンスメソッドとクラスメソッドの呼び出し方

プログラミングにおいて、メソッドの呼び出し方は、そのメソッドがインスタンスメソッドなのか、クラスメソッドなのかによって異なります。ここでは、これらのメソッドをさまざまな状況でどのように呼び出すかについて解説します。

インスタンスメソッドをクラス外で呼び出す

インスタンスメソッドは、クラスのインスタンスを介して呼び出します。まずはクラスのインスタンスを作成し、そのインスタンスを通じてメソッドを呼び出します。

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

まとめ

インスタンスメソッドとクラスメソッドは、それぞれ特定の方法で呼び出す必要があります。これらの基本的な使い方を理解することは、効果的なプログラミングのために重要です。クラスとインスタンスの概念を適切に活用し、メソッドの呼び出し方をマスターしましょう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?