0
0

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.

Ruby:「インスタンスメソッド」「クラスメソッド」「インスタンス変数」「クラス変数」について

Last updated at Posted at 2023-04-29

実装

例として、Carクラスを考えます。Carクラスには、インスタンスごとに異なる状態(例:速度)があり、またクラス全体に関連する情報(例:生成された車の総数)があります。

class Car
  # 初期化
  @@total_cars = 0

  # 初期化
  def initialize
    @speed = 0 # 速度
    @@total_cars += 1 # 車の総数
  end

  # クラスメソッド
  def self.total_cars
    @@total_cars
  end

  # インスタンスメソッド(ゲッター)
  def speed
    @speed
  end

  # インスタンスメソッド
  def accelerate(amount)
    @speed += amount
  end
end

# 各Carインスタンス
car1 = Car.new
car2 = Car.new

puts Car.total_cars # 2 (car1+car2=2:クラスメソッドを呼び出す)

car1.accelerate(20)
puts car1.speed # 20 (cat1インスタンスメソッドを呼び出す)

car2.accelerate(50)
puts car2.speed # 50 (car2インスタンスメソッドを呼び出す)

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

  • インスタンスメソッド:speedとaccelerate(amount)は、インスタンスの状態(速度)に関連する操作を行うため、インスタンスメソッドとして定義されています。

  • クラスメソッド:self.total_carsは、生成されたCarインスタンスの総数を返すクラスメソッドです。このメソッドはインスタンスに依存しないため、クラスメソッドとして定義されています。

「@(インスタンス変数)」「@@(クラス変数)」の違い

  • @(インスタンス変数):@speedはインスタンス変数であり、各Carインスタンスが固有の速度を保持。

  • @@(クラス変数):@@total_carsはクラス変数であり、生成されたCarインスタンスの総数を追跡。すべてのCarインスタンスは、同じ@@total_cars変数を参照します。

まとめ

  • インスタンスごとの状態や振る舞いに関連する情報や操作はインスタンスメソッドで定義し、インスタンスに依存しない情報や操作はクラスメソッドで定義します。
  • インスタンス変数は、そのクラスのインスタンスに固有のデータを保持し、クラス変数は、そのクラスのすべてのインスタンスに共通のデータを保持します。
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?