LoginSignup
0
0

More than 1 year has passed since last update.

クラスメソッドとインスタンスメソッドの違い

Last updated at Posted at 2022-06-15

メソッドとは

Rubyではdefを使ってメソッドを定義します。

def # メソッド名(引数)
  # 必要な処理
end
def add(a, b)
  puts a + b
end
add(1, 1)
#=>2

クラスとは

Rubyではクラスを次のように定義します。クラス名(例:Addition)は必ず大文字で始めます。

class Addition
end

インスタンスとは

Rubyでは以下のようにクラス名.newと書くことでインスタンスを生成することができます。

Addition.new

インスタンス変数とは

インスタンス作成時に実行されるinitializeメソッドを利用して「@がついたインスタンス変数」に代入します。インスタンス変数はインスタンス内であればどこでも呼び出すことができます。

class Addition

  def initialize(a, b)
      @a = a
      @b = b
  end

end

インスタンスメソッドとは

インスタンスに紐づけられたメソッドで、レシーバがインスタンスのメソッドとも言う。インスタンスに含まれるデータ(インスタンス変数)を読み書きする場合に定義されます。クラス構文の内部で以下のように定義します。

class Addition

  def initialize(a, b)
      @a = a
      @b = b
  end
  
  #以下がインスタンスメソッド
  def add
      puts @a + @b
  end
 
end

addition_1 = Addition.new(1, 1)
# インスタンスに対してインスタンスメソッドを呼び出す
addition_1.add
#=> 2

クラスメソッドとは

クラスに紐づけられたメソッドでレシーバがクラスのメソッドともいう。インスタンスに含まれるデータは使わないメソッドを定義したいときに使われます。クラスメソッドを定義する方法はいくつかあり、以下はself.をメソッド名の前に付ける方法です。

# クラスメソッドを定義する方法その一

class #クラス名

  def self.#クラスメソッド
   #クラスメソッドの処理
  end

end

クラスメソッドを定義する方法の二つ目はclass << selfからendの間にメソッドを記述する方法です。

# クラスメソッドを定義する方法その二

class #クラス名
  class << self

      def #クラスメソッド
      #クラスメソッドの処理
      end
      
  end
end

クラスメソッドの例です。

class Addition
  @@total_calculations = 0

  def initialize(a, b)
    @a = a
    @b = b
    #  インスタンスの作成毎に+1
    @@total_calculations += 1
  end

  # インスタンスメソッド
  def add
    puts @a + @b
  end

  # クラスメソッド
  def self.count_calculations
    puts "計算回数は#{@@total_calculations}回です"
  end
end

addition_1 = Addition.new(1, 1)
addition_1.add
#=> 2
# クラスメソッドを呼び出す
Addition.count_calculations
#=> 計算回数は1回です

クラスメソッドとインスタンスメソッドの違い

クラスメソッドはクラスに紐づけられており、インスタンスメソッドはインスタンスに紐づけられている点が違います。

0
0
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
0
0