【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文の場合、そのコードが実行されなくても(変数に代入がされなくても)ローカル変数を宣言したこととなる

まとめf:id:haru89:20200524090613j:plain:w70

実際に代入がされていなくても、代入を行う記述が存在すればローカル変数を宣言したととなることがわかった。ただ、可読性を高めるためにも、if文やunless文の外で変数を代入し、変数が宣言されていることを明確にしたほうが良さそう

参考

https://qiita.com/jnchito/items/b4793d719892c8860423