インスタンス変数の作成と使い方
インスタンスの中で使用されるのがインスタンス変数です。インスタンス変数はクラス内のすべてのメソッドから使用することができます。ここでは 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 )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。