メソッドとは
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回です
クラスメソッドとインスタンスメソッドの違い
クラスメソッドはクラスに紐づけられており、インスタンスメソッドはインスタンスに紐づけられている点が違います。