Rubyの「後置if」は「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の結果を返すだけ)

フォローする

スポンサーリンク