Rubyでは変数名で、その変数がローカルなのかグローバルなのか定数なのかを定義する。
Javaでは名付けにいろんなルールがありますが、ルールとは言え、あくまで慣習的なものであり変数名なんてのはただの名前でしかない。しかし、Rubyでは変数名によってその変数の機能が変わる。
スポンサーリンク
ローカル変数
小文字で始まるのがローカル変数。
ローカル変数は、ブロック内やメソッド内など、そのスコープ内でのみ参照可能。
スポンサーリンク
グローバル変数
$で始まるのがグローバル変数。
グローバル変数は、どこで定義しようとも、どこからでも参照することができる。
定数
大文字で始まるのが定数。
※一文字目だけではなく全て大文字で表記するのが普通。
定数は、一度値を代入すると変更することができない。と思いきやエラーメッセージが出るだけで再代入できてしまう。定数じゃないやん。
定数はローカル変数と同じく原則として、定義したスコープ内からしか参照できない。
クラス内で定義した定数は、
1 | クラス名::定数名 |
で参照できる。
1 2 3 4 5 6 | class MyClass CONST_VAR = 5 end puts CONST_VAR #=> error puts MyClass::CONST_VAR #=> 5 |
クラス外で定義した定数は、暗黙的にObjectクラスの定数となる。以下のように変数名だけでも参照することができるし、Objectクラスの定数として参照することもできる(Objectは省略可能)。
1 2 3 4 5 | CONST_VAR = 5 puts CONST_VAR #=> 5 puts Object::CONST_VAR #=> 5 puts ::CONST_VAR #=> 5 |
注意!定数をメソッド内で定義・代入することはできない。
1 2 3 4 5 6 7 8 | def set_const_var num CONST_VAR = num end #実行結果(error) test.rb:2: dynamic constant assignment CONST_VAR = num ^ |