論理式

職場で、ペアプロ風なJavaのソースレビューしていて、

boolean hogehoge = 〜;
boolean fugafuga = 〜;
if (!hogehoge || !fugafuga) {
  〜
}
  • ※変数名はブログ用です。

とあったので、if文の式を変形させて、「ロジックの読みやすさ」を比較したくなり、
以下の様に書いた。

boolean hogehoge = 〜;
boolean fugafuga = 〜;
// if (!hogehoge || !fugafuga) {
if (!(hogehoge && fugafuga)) {
  〜
}

ド・モルガンの法則
です。
すると、ソース作者曰く

それだと、意味が変わりますよね。

…。どうやら、ド・モルガンの法則をご存知なかった様だ。それどころか交換法則さえも知らないかも。

そこで、某表計算ソフトを使って、以下の様に説明して差し上げました。

!hogehoge || !fugafuga

!(hogehoge & fugafuga)


ここまで書いたら

あ、同じなんですね。

と、納得してくれました。

ド・モルガンの法則という存在を示し、さらにid:hyukiさん著の

プログラマの数学

プログラマの数学

を紹介しました。

結局、今回のソースでは書き換えない方がロジックはやみ易かったので、最初のコードを採用しました。