現在、「Ruby on Rails 5 速習実践ガイド」を読みながら勉強をしているのですがローカル変数とインスタンス変数についてあまり理解せずに進んでしまいました。
なので、きちんと理解するため記事にしてみました。
プログラミング初心者のため認識違いがあった場合などは是非ご指摘下さい。
#ローカル変数とは
その場限りの一時的な変数です。メソッド内で定義したローカル変数はそのメソッドの中でしか使うことができず、他のメソッドからは使うことができません。
#インスタンス変数とは
オブジェクトの保持する変数です。オブジェクトのどのメソッドな内からも利用できます。
#試したこと
今回、自分でMyClassを作ってみました。
class MyClass
def method_1
number = 100
end
def method_2
number
end
end
そしてこのクラス (MyClass) のオブジェクトを作って、method_1を呼び出してみます。
> object = MyClass.new
> object.method_1
=> 100
このメソッドにはnumberというローカル変数に100という数値のオブジェクトをいれています。
そのためメソッドを呼び出すと100という値が返ってきています。
それに続けて、method_2を呼び出してみます。
> object.method_2
Traceback (most recent call last):
...
NameError (undefined local variable or method `number' for #<MyClass:0x00007ffe439012580>)
「numberという名前のローカル変数やメソッドは知りません」というエラーが表示されてしまいました。
ここではmethod_1で定義したnumberというローカル変数がmethod_2でも生き残っていれば表示されるはずです。
エラーが返ってきてしまったということは、method_1で使ったnumberは使えないという状況になりました。
次にローカル変数ではなくインスタンス変数を使ってみます。
class MyClass
def method_1
@number = 100
end
def method_2
@number
end
end
> object = MyClass.new
> object.method_1
=> 100
> object.method_2
=> 100
今度は、method_2でエラーが出ず、無事に100という値が返ってきました。
ここで同じインスタンス変数を利用できていることがわかります。
#まとめ
ローカル変数は1つのメソッドの中で一時的に使うデータを参照するために使います。
一方、インスタンス数は、特定のオブジェクトの内部で使いまわしたりできます。
#参考本
・ 現場で使える Ruby on rails 5 速習実践ガイド