Нет, 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
и!
, и потому что двойные негативы используются редко - большинство людей находят их особенно трудными для чтения.