【Ruby】ローカル変数に代入がされていなくてもエラーにならない
はじめに
Rubyはif文やunless文の場合、実際にローカル変数に代入がされていなくても、代入を行う記述が存在すればローカル変数を宣言したこととなる
以下のコードでは変数「num」が宣言されていないので、エラーが発生する
if num % 2 == 0 message = "偶数" end puts message
=> undefined local variable or method `num' for main:Object (NameError)
変数「num」を宣言し、再度実行してみると「nil」が返ってきた
num = 1 if num % 2 == 0 message = "偶数" end p message
=> nil
変数「num」を宣言しても、if文の内容が実行されない(変数「message」の代入が行われない)ため、エラーが発生すると思っていたが、そうではなかった
Rubyはif文やunless文の場合、そのコードが実行されなくても(変数に代入がされなくても)ローカル変数を宣言したこととなる
まとめ
実際に代入がされていなくても、代入を行う記述が存在すればローカル変数を宣言したととなることがわかった。ただ、可読性を高めるためにも、if文やunless文の外で変数を代入し、変数が宣言されていることを明確にしたほうが良さそう