前提・実現したいこと
Rubyにおけるif文の認識をしっかりさせたい。
質問内容
Ruby初級レベルの者です。
プロを目指す人のためのRuby入門(俗に言うチェリー本)において、
「Rubyのif文は最後に評価された式を戻り値として返す」との記載について質問です。
このことを念頭において、FizzBuzzメソッド(後述)を作成してみましたが、違いました。
原因はif文の認識の違いにあるようです。
以下のコードにおいて、
n%15==0が最後に評価されるならば、n=15の時、FIzzBuzzが出力されるものだと思っておりましたが、
実際には先にn%3==0が真になってしまいます。
これは「Rubyのif文は最後に評価された式を戻り値として返す」に矛盾しませんか?
私のFizzBuzzメソッドのコード
ruby
1def fizz_buzz(n) 2 if n%3==0 3 'Fizz' 4 elsif n%5==0 5 'Buzz' 6 elsif n%15==0 7 'Fizz Buzz' 8 else 9 n.to_s 10 end 11end 12 13puts fizz_buzz(15) #=>Fizz
解答のFizzBuzzメソッドのコード
ruby
1def fizz_buzz(n) 2 if n%15==0 3 'Fizz Buzz' 4 elsif n%3==0 5 'Fizz' 6 elsif n%5==0 7 'Buzz' 8 else 9 n.to_s 10 end 11end 12 13puts fizz_buzz(15) #=>Fizz Buzz
試したこと
Rubyのif文に関して調べてみました。
別のサイトで,
「条件式を上から順に評価していき真(true)となった時点でその後の条件式は評価されない」
との記述を発見しました。
FizzBuzzがうまくいかなかったので、この記述は正しいのでしょうが、
自分の認識ではif文の中の式を全て評価し、その評価した中で最後の真となった条件式の処理に分岐させるものだと考えておりましたが、さらに混乱した次第です。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3(私)
ruby 2.4(該当書籍)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/08 01:54