テクノロジー
2018年2月12日変数の種類とスコープについて
![](https://diveintocode.s3-ap-northeast-1.amazonaws.com/uploads/eye_catch/blog/24/tips_variable_scope.png?X-Amz-Expires=600&X-Amz-Date=20240727T035040Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWFR7K2KHQDYVHJA/20240727/ap-northeast-1/s3/aws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=8386b955f5b2579443633451d50b4356ffe14ea2dfa6465366ffb0e1ed7e6008)
今回は「変数の種類とスコープ」について学びます。 変数は数値や文字列を保持するための単なる箱ですが、実はとても奥が深い存在なのです。
今回は「変数の種類とスコープ」について学びます。
変数は数値や文字列を保持するための単なる箱
ですが、実はとても奥が深い存在なのです。
変数の種類とスコープ
変数は大きく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なので、このようにエラーが起きてしまいます。
今回のスコープ
は、プログラミングでとても重要です。
スコープが原因で、思わぬエラーが発生することもありますので、不明点があれば、関連サイトや書籍などでしっかり理解するようにしましょう。