条件式の否定表現は少なく

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条件ごとに条件を表現できるようになりました。