De Morgan’s laws state that specific Boolean statements can be written in different ways to the same effect.
The rules can be expressed in English as:
- the negation of a disjunction is the conjunction of the negations
- the negation of a conjunction is the disjunction of the negations
- the complement of the union of two sets is the same as the intersection of their complements
- the complement of the intersection of two sets is the same as the union of their complements
not (A or B) = (not A) and (not B)
not (A and B) = (not A) or (not B)
The negation modifies each conditional as shown below
< becomes >=
> becomes <=
== becomes !=
<= becomes >
>= becomes <
!= becomes ==
Why it is useful during programming?
It could help us and others to more easily read the if statements, and it’s also useful to refactor some if’s monsters (if u know what I mean).
- (!a && !b && !c), we will read it as, “not ‘a’, not ‘b’ and not ‘c’”.
- !(a || b || c), by using the second method, we can simply read this as “at least one of these is required.”
- (!a || !b || !c),after while we see that all requirements must be met
- !(a && b && c), now we see it immediately
De Morgan’s Laws can help simplify your code to make it more readable. You can change a sequence of negated ands to something that reads as “at least one of these is required”, and a sequence of negated ors to something that reads as “all of these are required.”