Логические операторы и метаязык
В формальной логике и языках программирования существует фундаментальная ошибка именования, которая тянется уже более ста лет и влияет на мышление миллионов программистов.
ПРОБЛЕМА
В естественном языке (метаязыке) слово «или» всегда означает выбор одного из двух:
«Ты идёшь налево или направо?» — не оба сразу.
«Это правда или ложь?» — не обе сразу.
«Будешь чай или кофе?» — одно из двух.
Однако в формальной логике оператор OR (ИЛИ) означает нечто другое — «хотя бы одно из двух, возможно оба». А то, что в метаязыке является настоящим «или», спрятано под непроизносимым именем XOR (исключающее ИЛИ).
ЧТО ТАКОЕ OR НА САМОМ ДЕЛЕ?
OR — это не «или». OR — это запятая.
«Купи хлеб, молоко, масло» — перечисление через запятую. Может купишь одно, может два, может всё. Любая комбинация, кроме «ничего из списка». Это в точности таблица истинности OR: ложь только когда всё ложно.
ПРАВИЛЬНОЕ СООТВЕТСТВИЕ
В метаязыке «и» (оба) — это оператор конъюнкции. Текущее имя AND. Предлагаемое имя AND. Здесь ошибки нет.
В метаязыке «,» (запятая, перечисление) — это оператор дизъюнкции. Текущее имя OR. Предлагаемое имя COM (от comma — запятая).
В метаязыке «или» (одно из двух) — это оператор исключающего или. Текущее имя XOR. Предлагаемое имя OR.
СЛЕДСТВИЯ
Программисты пишут if (a || b) и if (a && b) — это 99% всего кода. XOR почти не используется в бизнес-логике, хотя множество задач — это именно исключающий выбор: «пользователь либо админ, либо гость», «заказ либо оплачен, либо отменён», «свет либо включён, либо выключен».
Вместо одного оператора XOR программист пишет (a || b) && !(a && b) — лишний код, лишняя сложность, лишние ошибки. Когда XOR был добавлен в аппаратную часть компьютеров, производительность выросла на 30%, потому что одна операция заменила цепочку из трёх.
ВЫВОД
Формальная логика назвала OR словом «или», хотя это запятая. А настоящее «или» назвала XOR и спрятала за непроизносимой аббревиатурой. Эта ошибка именования живёт уже более века и ежедневно порождает избыточный код по всему миру.
Исправление: COM (comma) вместо OR, OR вместо XOR. Три оператора — три имени — каждое соответствует тому, как мыслит человек.
Поделиться: