
ド・モルガンの法則とは
ド・モルガンの法則は論理演算における否定(!)の扱い方を示す法則です。
この法則により複雑な条件を簡単に書き換えたり、コードを理解しやすくしたりできます。
ド・モルガンの法則の2つの基本形
ド・モルガンの法則にはNOT(A AND B)とNOT(A OR B)の2つの基本形が存在します。
JavaScriptで書くとそれぞれ次のように表現できます。
NOT(A AND B)
!(A && B) === !A || !B
NOT(A AND B)は例えば以下のようなフォームの未入力チェックのコードなどで使えます。
const username = ''
const email = 'foo@example.com'
// !(A && B)
if (!(username && email)) {
console.log('エラー: どちらかの項目が未入力です')
}
// !A || !B
if (!username || !email) {
console.log('エラー: どちらかの項目が未入力です')
}
!(A && B) よりも !A || !B のように括弧が少ないほうが可読性が良いので、もし !(A && B) のコードがあったら !username || !email に書き換えが可能だということを覚えておくと良いでしょう。
NOT(A OR B)
!(A || B) === !A && !B
NOT(A OR B)は例えば以下のような権限の判定のコードなどで使えます。
const isLoggedIn = false
const isAdmin = false
// !(A || B)
if (!(isLoggedIn || isAdmin)) {
console.log('アクセス権限がありません')
}
// !A && !B
if (!A && !B) {
console.log('アクセス権限がありません')
}
NOT(A OR B)のときも !(A || B) より !A && !B のほうが括弧が少ない書き方になるので、後者のほうが可読性が良くなります。
NOT(A AND B AND C)やNOT (A OR B OR C)もある
前述の2つは基本形で、NOT(A AND B AND C)やNOT (A OR B OR C)も成立します。
NOT(A AND B AND C)
!(A && B && C) === !A || !B || !C
const username = 'sato'
const email = 'foo@example.com'
const tel = ''
// !(A && B && C)
if (!(username && email && tel)) {
console.log('エラー: いずれかの項目が未入力です')
}
// !A || !B || !C
if (!username || !email || !tel) {
console.log('エラー: いずれかの項目が未入力です')
}
NOT(A OR B OR C)
!(A || B || C) === !A && !B && !C
const isAdmin = false
const isLoggedIn = false
const isPermission = false
// !(A || B || C)
if (!(isAdmin || isLoggedIn || isPermission)) {
console.log('アクセス権限がありません')
}
// !A && !B && !C
if (!isAdmin && !isLoggedIn && !isPermission) {
console.log('アクセス権限がありません')
}
まとめ
ド・モルガンの法則のNOT(A AND B)とNOT(A OR B)についてJavaScriptで解説しました。
この法則を知っておけば「if (!(isAdmin || isLoggedIn || isPermission)) {」のような括弧が入れ子の可読性が悪いコードがあっても、瞬時に「if (!isAdmin && !isLoggedIn && !isPermission) {」に書き換えることができます。
JavaScriptなどのプログラミング言語でコードを書くなら必ず覚えたほうが良いでしょう。