Rubyには明示的な変数宣言の構文はありませんが、それでも無秩序に使えるわけではありません。また、Rubyには大きく分けて4種類の変数がありますが、それぞれごとに挙動が少しずつ違っています。
グローバル変数
Rubyの場合、グローバル変数は$
で始まります。グローバル変数へ代入せずにいきなりアクセスすると、エラーが発生することはなく、nil
値が入っているものとみなされますが、この挙動に頼るのは行儀がよくない、とのことです。
インスタンス変数
Rubyの場合、インスタンス変数は@
1つで始まります。これまた、未初期化でもnil
としてアクセス可能です。
クラス変数
Rubyの場合、クラス変数は@@
で始まります。クラス定義で初期化できる1からかどうかはわかりませんが、未定義へのクラス変数へのアクセスはNameError
を引き起こします。
ローカル変数
ローカル変数は特にプレフィックスがありませんが、メソッド名と同じ形で、しかも引数のないメソッドはカッコを省略できると来たものなので、微妙にややこしくなります。一度も代入していない名前を参照した場合、それはメソッド呼び出しとみなされます2。代入すると、(メソッド呼び出しの引数がない)その名前はローカル変数として処理されますが、空のカッコを付けることでメソッドの方を呼び出すことも可能です。
# Kernel#rand…乱数を返すメソッド
p rand #0から1の乱数値(小数)
rand=2
p rand #変数のほうが読まれて2となる
p rand() #メソッド呼び出し
p rand 3 #カッコがなくても引数があればメソッドと解釈される