はじめに
今回はRubyの変数の種類と、それぞれの違いについて説明します。
どこでどの変数を使用すべきか把握できていないと、思わぬエラーの原因になったり、
あるいは保守性が下がってしまったりします
しっかり把握して使い分けが出来るようになりましょう。
変数自体が何かがわからない方はググってください。
変数の種類
グローバル変数
グローバル変数とは、簡単にいうと**"そのプロジェクト内、どこでも使用できる変数"**のことです!
どこで定義しても、どこからでも使用できる変数です。
一見とても便利ですが、どこでも使えてしまうからには一意である必要があります。
どこかで変数名が被ってしまうとエラーの原因になります。
使用する際は、本当にグローバルじゃなければダメなのかしっかり検討する必要があります!
定義の仕方は以下のように、変数の先頭に**$**マークをつけるだけです!
$animal = "cat"
def animal_type
puts "This animal is #{$animal}"
end
animal_type
# 出力結果==> This animal is cat
インスタンス変数
インスタンス変数は、次に紹介するローカル変数と合わせてよく使う変数のうちの1つです。
インスタンス変数は、インスタンスごとに値を持つことが出来、クラス内の全メソッド内で使用することが出来ます。
定義の仕方は以下のように、変数の先頭に**@**マークをつけるだけです!
class User
def set_name(str)
@user = str #インスタンス変数@userをここで宣言!
end
def put_name
puts @user #違うインスタンスメソッドで呼び出してみます
end
end
user = User.new #インスタンスを作成
user.set_name("まいける") #インスタンスに対してそれぞれのメソッドを実行すると
user.put_name
# 出力結果==> まいける
#ちゃんと表示されました!
ローカル変数
ローカル変数は、その変数が宣言されたメソッド内やブロック内のみで使用できます。
使用範囲(スコープ)が一番狭い変数です!
定義する際は、変数の先頭に何もつける必要ありません!
以下は同一メソッド内でローカル変数を宣言し、使用している例です。
class User
def set_name(str)
user = str #ローカル変数userをここで宣言!
puts user #同じメソッド内で出力してみます
end
end
user = User.new
user.set_name("まいける")
# 出力結果==> まいける
# 同じメソッド内であれば問題ないことがわかりました!
次に宣言したメソッドと別のメソッドでローカル変数を使用した場合どうなるか見てみます。
class User
def set_name(str)
user = str
end
def put_name
puts user
end
end
user = User.new
user.set_name("まいける")
user.put_name
# 出力結果==> undefined local variable or method `user' for #<User:0x00007fda840d20f8> (NameError)
# put_nameメソッド呼び出し時のローカル変数userが宣言されていませんよ。というエラー
ローカル変数は宣言したメソッド内でしか使用できないので、当然エラーになりました。
###まとめ
| 変数の種類 | 特徴 |
|:------------------------|-------------------------:|:-------------------------:|
| グローバル変数| プロジェクト内どこからでも呼び出すことができる。|
| インスタンス変数| 同一クラス内のメソッドであればどこでも使用できる。|
| ローカル変数 | 宣言したメソッド、ブロック内のみ使用できる。|
#さいごに
実は他にも変数は種類があるのですが、今回は基本的な上記3種類を紹介させて頂きました!
特にインスタンス変数とローカル変数はよく使用するので
ざっくりでも違いを理解されていた方が良いかと思います!
最後までご覧頂きありがとうございました