LoginSignup
2
2

More than 5 years have passed since last update.

Rubyの基本記述の仕方〜その9〜 ローカル変数とインスタンス変数

Last updated at Posted at 2018-10-09

変数の取り扱いで、「@」を頭に付けるべきか不要なのか判断に迷うことが増えてきました。
先輩から聞いた説明がとても明快で、つまづきがひとつ解消。
忘れないうちに以下にまとめておきます。

ローカル変数

・頭に何もつかない。
・メソッドで定義したスコープ(def〜end)の中でだけ使える。

ruby.qiita.rb
def morikuma
 user = User.find_by(id: params[:id])
end

※定義の内容はあくまで一例です。

インスタンス変数

・@が頭につく。
・インスタンス変数のスコープはメソッド定義内に限定されない。
 →スコープの範囲外や、ファイルが変わっても使える。

ruby.qiita.rb
def morikuma
 @user = User.find_by(id: params[:id])
end

※定義の内容はあくまで一例です。

検証

実際に、インスタンス変数で定義されて正常に動いているコードをローカル変数に変更して検証してみました。

<正常に機能している記述>

ruby.qiita.rb
def index
 @users = User.all
end
index.html.erb
〜
<% @users.each do |user| %>
〜
〜
<% end %>
〜

@usersで定義されているインスタンス変数を、ローカル変数に変えてみます。
<検証用に変更した記述>

ruby.qiita.rb
def index
 users = User.all
end
index.html.erb
〜
<% users.each do |user| %>
〜
〜
<% end %>
〜

スクリーンショット 2018-10-09 15.47.34.png

undefined local variable or method 'users'
「users」というメソッドが定義されていないよとエラーが出ました。

ローカル変数はあくまで、定義したスコープの範囲内でしか適用されないことが確認できました。
別のファイルで呼び出そうとしても「undefined」となります。

参考サイト

progate
https://prog-8.com/

Ruby のエラーメッセージを読み解く(初心者向け)その 2
https://qiita.com/scivola/items/77017693de371ab49667

Ruby 変数のスコープ
https://qiita.com/kansiho/items/f5ab9b6eeb990e6af327

RubyLife インスタンス変数
https://www.rubylife.jp/ini/class/index4.html

2
2
2

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
2
2