条件式の否定表現は少なく
2021.4.3
遊園地に入場する場面を思い浮かべます。
「ユーザーがチケットを持っておらず、かつキャストでもなければ入場を禁止する」という条件で条件文を書いてみます。
まずはそのまま書くとこうなります。
no_entry if !user.has?(ticket) && !user.cast?
ド・モルガンの法則を使ってANDとORをひっくり返して否定を外に出してあげます。
そうすると、「ユーザーがチケットを持っていなければ入場できない。または、キャストでなければ入場できない」という条件に置き換えることができます。
no_entry if !(user.has?(ticket) || user.cast?)
unlessを使って自然なコードにしてあげます。
no_entry unless user.has?(ticket) || user.cast?
これにより、条件式が分解でき1条件ごとに条件を表現できるようになりました。