Тот же закон, что ещё в главе 10 позволил построить ИЛИ из одних только NAND-элементов, — здесь применяется к запутанному условию в коде, а не к схеме из микросхем.
НЕ(A И B) = (НЕ A) ИЛИ (НЕ B), и симметрично: НЕ(A ИЛИ B) = (НЕ A) И (НЕ B). Отрицание составного условия распределяется на каждую часть по отдельности, с обязательной сменой И на ИЛИ (и наоборот).
Оба варианта строго эквивалентны по результату — какой из них яснее, зависит от конкретного контекста и личного стиля чтения кода, но знание закона Де Моргана даёт возможность выбрать более понятную форму осознанно, а не случайно.
Частый реальный шаблон — досрочно завершить функцию, если условие для продолжения работы не выполнено. Если исходное условие для продолжения — "пользователь вошёл в систему И имеет разрешение", условие для раннего выхода — инверсия этого составного условия, и здесь закон Де Моргана нужен, чтобы инвертировать его правильно:
Инвертируя условие "A ИЛИ B" наивно, легко ошибочно написать "НЕ A И НЕ B" — что на самом деле верно! Но обратная ошибка встречается чаще: инвертируя "A И B", легко по инерции написать "НЕ A И НЕ B" (сохранив И вместо смены на ИЛИ) — это уже неверно. Правильная инверсия "A И B" — именно "НЕ A ИЛИ НЕ B", со сменой оператора, а не механическим добавлением НЕ к каждой части при сохранении исходного И/ИЛИ между ними.
Тот же самый закон, применённый здесь к строке кода, буквально позволил вывести элемент ИЛИ из одних только элементов NAND в главе 10 — не похожий, а буквально тот же математический инструмент, применённый в двух совершенно разных областях: физической схеме и тексте программы.
Дано условие: "продолжить, если файл существует ИЛИ у пользователя есть права на
создание". Запиши условие для раннего выхода (когда продолжать не следует), правильно
применив закон Де Моргана.
Ответ: исходное — "существует ИЛИ есть права", инверсия по Де Моргану — "НЕ
существует И НЕТ прав" — выйти нужно, только если оба условия одновременно ложны.
Финальная глава этого блока — логика в базах данных: как те же И/ИЛИ/НЕ работают в условиях WHERE и логике JOIN при работе с данными.
Книга бесплатна для чтения. Автор — Тариел Бежанидзе, компьютерный мастер в Батуми · tariel.ge · все бесплатные книги. Копировать текст целиком на другие сайты — только со ссылкой на источник.