Rubyの「後置if」を使った時の戻り値の話。
これが結構理解したつもりでも、次に使う時に忘れてたりするのでメモ
特に返り値を利用する時に勘違いしていると大変だったりした。
初心者だと躓くポイントかもしれない。
環境情報
ruby 2.3.1p112
例
「返り値のhogeの値を使いたいな」
↓
「でも変数hogeには負の数は絶対入ってほしくないな・・・」
↓
「よし、これでhogeがnegative(負の数)だったら0を代入出来たぞ!」
irb(main):031:0> hoge = -100 => -100 irb(main):032:0> hoge = 0 if hoge.negative? => 0 irb(main):033:0> hoge => 0
これで安心して返り値を使うことが出来るな。めでたしめでたし。
返り値も「0」、変数hogeも「0」になる
しかし、もし変数hogeが正の数だったらどうなるか?(if が false の場合)
irb(main):034:0> hoge = 100 => 100 irb(main):035:0> hoge = 0 if hoge.negative? => nil irb(main):036:0> hoge => 100
返り値自体は「nil」になっているのがわかる
まちがい
if
が false
だった場合もてっきりhoge
の値が返ると思いこんでいた。
そして返り値を利用したコードの場合、想定と違うことになった。
単純に返り値を利用しようとしてコードを書くのなら注意する
hoge = 0 if hoge.negative?
true
だった場合は hoge = 0
まで実行して終了
false
だった場合は hoge = 0
が実行されずに終了(ifの結果を返すだけ)
おわり
コメント