テクノロジー
2018年2月12日変数の種類とスコープについて
今回は「変数の種類とスコープ」について学びます。 変数は数値や文字列を保持するための単なる箱ですが、実はとても奥が深い存在なのです。
今回は「変数の種類とスコープ」について学びます。
変数は数値や文字列を保持するための単なる箱
ですが、実はとても奥が深い存在なのです。
変数の種類とスコープ
変数は大きく4種類存在しています。
なぜこれだけ複数の種類の変数が存在しているかは、それぞれ スコープ
に違いがあるからです。
スコープとは 中身をどれだけ保持することができるか
という意味で、
イメージとしては 守備範囲
のようなものです。
変数名 | 書き方 | スコープ | 使用頻度 |
---|---|---|---|
ローカル変数 | hoge | メソッド定義した場所(Rubyならdefからend)まで | 高 |
インスタンス変数 | @hoge | 定義したクラスのインスタンスメソッド | 高 |
クラス変数 | @@hoge | 定義したクラス内 | 低 |
ローカル変数 | $hoge | クラスの外も可能 | 激低 |
今回は使用頻度が高めな ローカル変数
と インスタンス変数
について理解を深めていきましょう。
ローカル変数
ローカル変数の書き方
ローカル変数は以下のように 先頭はアルファベット
で始める必要があります。
さらに _
や 数字
を使うことも可能です。(ただし、数字などは普通あまり使いません)
hoge #=> OK
ruby_dive #=> OK
blog3 #=> OK
12345 #=> NG
ローカル変数のスコープは 定義した場所からendまで
です。
例えば以下のように変数を定義すると sum = 1 + 2
から def-endのend
までがスコープとなります。
例えば、下記のようなコードがあったとします。
def addition
sum = 1 + 2
sum += 2
3.times do
sum += 4
end
end
puts addition
こちらの実行結果はこうなります。
3
一方で以下はループ処理の中に初めて sum
という変数が登場しているので、スコープはsum = 4
から ループ処理のendまで
となります。
したがって sum += 1
はスコープ外のため、エラーが発生します。
def addition
3.times do
sum = 4
end
sum += 1 #エラー
end
puts addition
こちらの実行結果はこうなります。
object.rb:6:in `addition': undefined method `+' for nil:NilClass (NoMethodError)
from object.rb:10:in `<main>'
スコープ外に定義されたsum += 1
はsum = 4
のsumとは別のsumなので、このようにエラーが起きてしまいます。
今回のスコープ
は、プログラミングでとても重要です。
スコープが原因で、思わぬエラーが発生することもありますので、不明点があれば、関連サイトや書籍などでしっかり理解するようにしましょう。