if文の条件はただの条件であって何もしないという誤解
if文について
普通は、このように条件によって処理を分岐する記述をします。
age = 20 if age < 18 then print "未成年" elsif age < 20 then print "今は未成年だけど2020年4月からは成年" else print "成年" end
この条件という言葉に引っ張られて、if文のことを盛大に勘違いしていたのです…。
if文について詳しく
制御構造 - Ruby 2.5.0 リファレンスマニュアル によると、if文とは、こういったもの。
条件式を評価した結果が真である時、then 以下の式を評価します。 if の条件式が偽であれば elsif の条件を評価します。 elsif 節は複数指定でき、全ての if および elsif の条件式が偽であったとき else 節があればその式が評価されます。
では、真偽とは?
偽: falseとnil 真: falseとnilを除くすべての値
何を勘違いしていたか
if hogehoge
のhogehoge
の部分はただの「条件」であって何もしないと誤解していました。
つまり、条件式を処理して、その処理結果は条件分岐以外に何も影響を与えないと。
例えば、このような式の場合であれば、出力結果は、20
となります。
age = 20 if age + 5 print age else print "age+5が偽" end
こういうのを見慣れていて、出力結果が条件分岐以外に影響しないというイメージがついていたのかもしれません。
これは、単純にage+5
が処理されていて、処理結果が真だっただけのことで、age
に対しては何も変更が加えられていなかっただけでした。
上の式のage + 5
をage += 5
に変更してみます。
age = 20 if age += 5 print age else print "age+5が偽" end
条件がただの条件であって実際には処理されないと考えると、出力されるのは20
(間違い)となります。
しかし、実際にはage += 5
が処理され、falseでもnilでもない値25
が評価されているため、出力されるのは25
です。
ageの値も25
となっています。
print age
最後に
条件はただの条件であって何もしない、という勘違い。 Rubyに限った話ではないけれども、今まで条件としてしか扱わなかったら全然気がつかなかった盛大な勘違いの話でした。