🗽

"If not"と"unless"の違い

2020/12/03に公開
4

こちらAmetaです。良いエラーがなかったので、今回のEOTDはお休みします。

代わりに、今日Rubyでコードを打っていて気になったことがありました。


いきなりクイズ

#1
if a =! b
end
#2
if not a == b
end
#3
unless a == b
end

上記のような条件分岐を使う場面。

この3つの選択肢の内、2つの条件式は同じ意味ですが、一つは仲間外れです。

さて、それは何番でしょうか!

Answer
#1
if a =! b
end

解説

わかりやすくするために文章で書いてみます。

#1
if a =! b

if "a is not b" is true

#2
if not a == b

if "a is b" is not true

#3
unless a == b

if "a is b" is false

こうしてみると#2と#3の選択肢が同じことがわかりやすいですよね。
逆に、#1は二つの条件式の真反対を意味しています。

疑問の種

今日コードを書いている中で、この#1の条件式と#3の条件式が直感的に同じように感じました。

しかし実際、それぞれ記述してみたら、思うような動作が得られなかったので今回の記事を作ってみました。

ただここでもう一つ疑問が生まれました。。。

"if not" と "unless"は全く同じモノなのか?

"if not"と"unless"にもどこかニュアンスを感じたので、それについて調べていたら以下のディスカッションを発見。

https://github.com/rubocop-hq/ruby-style-guide/issues/329

英語のネイティブスピーカーの方々が、この二つの表現にどのような違いを感じているのか。について話されているでした!

内容のまとめとしては、

  • 条件式の中身がfalseになると予測する場合は"unless"を、trueになると予測する場合は"if not"を使用する。

  • "if not"を使う方が例外として条件式を立てているようで、自然に感じる。

というような意見がありました!

Summary Of The Day (SOTD)

結論、"if not"と"unless"はプログラム上では同じ役割を持っています。

ただこの二つの表現をうまく使い分けることで、自分以外の人(特にイングリッシュネイティブの方)からみたコードの可読性を高めることが出来るのではないのでしょうか...?

英文法にも詳しくなれるプログラミングってすごい。。。今日の学びです。

Discussion

Kazuhito NakayamaKazuhito Nakayama

当たり前のようにGithubのDiscussionsを参考にされておりますが、とてもすごいことだと思います!
素晴らしい知見をありがとうございます!

AmetaAmeta

気付くのが遅くなりましたが、お褒めのコメントありがとうございます!!今後のモチベーションになります笑