LoginSignup
11
8

More than 5 years have passed since last update.

Rubyの変数「宣言」

Posted at

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 #カッコがなくても引数があればメソッドと解釈される

  1. クラス定義中に@foo=5のようなものを書くと、それはクラスインスタンス変数として処理されます。 

  2. さらにそこでmethod_missingが加わると、一歩間違えれば悲惨なことになります。 

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8