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 3 years have passed since last update.

ローカル変数とインスタンス変数の違い

Last updated at Posted at 2020-12-06

現在、「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 速習実践ガイド

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?