Ні, немає жодного nor
оператора жодної мови програмування на високому рівні.
Чому?
Головним чином тому, що важко читати:
- воно вимагає розумового поєднання декількох операторів (" і не ", або в більш літературному стилі: " подальший негатив ", " кожна неправда " )
- це передбачає неявне
not
на перший операнд, але читач розуміє це лише згодом
- він відрізняється від людських мов, які використовують явний заперечення на першому операнді, такі як " ні х, ні у ", " ні х ні у ". Таким чином, читач може сплутати
(x nor y)
з (x and not y)
замість((not x) and (not y))
- деякі читачі плутають із очевидною
or
семантикою, яка не застосовується
Але це так часто в апараті ...
nor
це елементарний апаратний ворота, який можна використовувати для створення всіх інших логічних воріт. Отже, можна стверджувати, що всі інші логічні оператори - це комбінації і nor
є найпростішим елементарним логічним оператором.
Однак те, що стосується обладнання, не обов'язково стосується людей. І незважаючи на свою популярність на апаратному рівні, деякі основні процесори навіть не пропонують NOR
у своєму наборі інструкцій асемблера (наприклад, x86 ).
Альтернативи
Читання має значення. А іноді це можна вдосконалити іншими засобами.
Використання існуючих операторів
Наприклад:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Впорядкування умов
if x==1 or x==2
action A
else
action B
замість
if x!=1 and x!=2
action B
else
action A
Використання до циклу
Деякі мови також пропонують вказівки щодо циклу, які дозволяють виражати умови з while
або за допомогою until
, дозволяючи вибирати більш "позитивний" спосіб. Ці інструкції, наприклад , until c do ...
в рубін , do until c ...
в VB , або repeat ... until c
в паскале і його нащадків.
Наприклад:
Until (x==1 or x==2) do
...
еквівалентно:
While (x!=1 and x!=2)
...
Зробіть функцію
Тепер, якщо ви все ще віддаєте перевагу nor
синтаксису, ви можете визначити функцію, але лише якщо ви не очікуєте, що це станеться ярликом:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Є перевага функції читабельності над оператором, оскільки читач одразу розуміє, що заперечення стосується всіх аргументів. У деяких мовах можна визначити функцію зі змінною кількістю аргументів.
or
і через те!
, що подвійні негативи рідко використовуються - більшість людей вважають їх особливо важкими для читання.