ド・モルガンの法則?
今の数学の先生はド・モルガンの法則教えるときに「これプログラミングでめっちゃ役立つので覚えておいてくださいね!」って強く言えるのいいなぁ
— Hardcore Engineer (@mpyw) November 17, 2022
復習してね♥ https://t.co/wSzEyN4RU1
— Hardcore Engineer (@mpyw) November 17, 2022
ということで勉強させて頂いた。
結論
否定の否定は、肯定である。
というだけのこと。
デートで例える
「彼はごはんをごちそうしてくれなかったわけではなかった。」
と
「彼はご飯をごちそうしてくれた」
が同じ意味を持つ。
どっちがわかりやすいか一目瞭然ですね。
phpで解説
りんごを7個以上持っているというプログラムを作る
if(!($ringo < 7)){}
if($ringo <= 7){}
上記2つとも同じ動きをするが、否定形「!」が無い方がわかりやすいですよね。
まとめ
否定の否定はわかりづらいので、肯定を使っていきましょう。
教えて頂きありがとうございました。
以下参考
ある集合が別の集合と等しくなるという法則だ。
これには2つあって、一つは「AかつB」でないは、「Aでない」または「Bでない」と等しい。
もう一つは「AまたはB」でないは、「Aでない」かつ「Bでない」に等しい。
これをド・モルガンの法則と呼ぶ。
否定の否定の~ってなった時こそ、ドモルガンチャンス!!
はぁ?意味わからん。
ということで
https://webgroove.work/de-morgan-law-php/
を参考にした
ド・モルガンの法則 をJavaScriptで表すと下記のような感じ。
!(P || Q) == !P && !Q
!(P && Q) == !P || !Q
1
2
!(P || Q) == !P && !Q
!(P && Q) == !P || !Q
さて、これを使ってさっきのを加工すると。
if (!(word != null && word !="")) { //以下略
1
if (!(word != null && word !="")) { //以下略
否定で括って && を || にする。
if (!( !(word == null || word == "") )) { //以下略
1
if (!( !(word == null || word == "") )) { //以下略
で、否定の否定って肯定だから、! が二つで打ち消しあう。
if (word == null || word == "") { //以下略
1
if (word == null || word == "") { //以下略
https://nzigen.com/ysawa/de-morgan-s-laws/
論理式を書くときは、なるべく否定が少なくなるように常に心がける。
これが、鉄則になります。
最初のコード
for ($i = 0; ! ($i > $limit || $i >= count($list)); $i++) {
}
ド・モルガンの法則
for ($i = 0; ! ($i > $limit) && ! ($i >= count($list)); $i++) {
}
否定の部分を反転
for ($i = 0; $i <= $limit && $i < count($list); $i++) {
}