インスタンス変数の作成と使い方

インスタンスの中で使用されるのがインスタンス変数です。インスタンス変数はクラス内のすべてのメソッドから使用することができます。ここでは Ruby でインスタンス変数を作成する方法と使い方について解説します。

(Last modified: )

インスタンス変数とは

インスタンス変数はクラスの中で定義します。インスタンス変数は、クラス内のすべてのメソッドで共通して使用することができます。最初にどこかのメソッドでインスタンス変数を使用するとインスタンス変数は作成されます。一度作成されたインスタンス変数は他のメソッド内で値を取り出したり別の値を格納したりすることができます。

またインスタンス変数はクラスから作成されるインスタンス毎に固有のものとなります。例えば生成されたインスタンスの中でインスタンス変数に格納された値と、別のインスタンスの中でインスタンス変数に格納された値は別のものとなります。

インスタンス変数を作成する

インスタンス変数の変数名は @ で始まります。例えば @name などです。ローカル変数と同じく変数に値が格納された時点から使用できるようになります。

class クラス名

  def メソッド名
    @name = 値
  end

end

インスタンス変数が使用可能になった場合、同じクラスの別のインスタンスメソッド内でも使用することができます。

class Car
  def setName(str)
    @name = str
  end
  
  def dispName()
    puts(@name)
  end
end

car = Car.new()
car.setName("crown")
car.dispName()

上記の場合は「setName」メソッドによってインスタンス変数 @name に値が格納され、「dispName」メソッドによってインスタンス変数 @name に格納されている値を表示しています。

クラスからは複数のインスタンスを生成することができますが、インスタンス変数はインスタンス毎に独立しているので、それぞれのインスタンスから参照できるインスタンス変数の値はそれぞれ別になります。次の例をみてください。

class Car
  def setName(str)
    @name = str
  end
  
  def dispName()
    puts(@name)
  end
end

car1 = Car.new()
car1.setName("crown")

car2 = Car.new()
car2.setName("civic")

car1.dispName()
car2.dispName()

上記の例では「car1」インスタンスと「car2」インスタンスには別々のインスタンス変数 @name が割り当てられていますので、それぞれのインスタンスに対してメソッドを使って値を格納した場合、上書きされることなく異なる値を格納することができます。

サンプルコード

では実際に試してみます。

# encoding: UTF-8

class Car
  def setName(str)
    @name = str
  end
  
  def dispName()
    puts(@name)
  end
end

car1 = Car.new()
car1.setName("crown")

car2 = Car.new()
car2.setName("civic")

car1.dispName()
car2.dispName()

上記を実行すると次のように表示されます。

インスタンス変数

今回は同じクラスから作成した 2 つのインスタンスに対して、それぞれインスタンス変数に文字列を格納してからそれを別のメソッドを使って画面に表示させています。同じインスタンス変数を使っていますがインスタンス変数はインスタンス毎に異なる値を格納できますので、それぞれ異なる結果を出力することができます。

-- --

Ruby でインスタンス変数を作成する方法と使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。