Không, không có nor
toán tử trong bất kỳ ngôn ngữ lập trình chính cấp cao nào.
Tại sao ?
Chủ yếu là vì nó khó đọc:
- nó đòi hỏi sự kết hợp tinh thần của một số toán tử (" và không ", hoặc theo phong cách văn học hơn: " tiêu cực hơn nữa ", " mỗi không đúng sự thật " )
- nó ngụ ý một ẩn
not
trên toán hạng đầu tiên, nhưng người đọc chỉ hiểu điều này sau đó
- nó khác với ngôn ngữ của con người, sử dụng một phủ định rõ ràng trên toán hạng đầu tiên, chẳng hạn như " không x cũng không phải y ", " cũng không phải x hay y ". Vì vậy, một người đọc có thể nhầm lẫn
(x nor y)
với (x and not y)
thay vì((not x) and (not y))
- một số độc giả nhầm lẫn với
or
ngữ nghĩa rõ ràng không áp dụng
Nhưng nó rất phổ biến trong phần cứng ...
nor
là một cổng phần cứng cơ bản có thể được sử dụng để tạo ra tất cả các cổng logic khác. Vì vậy, người ta có thể lập luận rằng tất cả các toán tử logic khác là các kết hợp và nor
là toán tử logic cơ bản đơn giản nhất.
Tuy nhiên, những gì đúng với phần cứng không nhất thiết đúng với con người. Và mặc dù nó phổ biến ở cấp độ phần cứng, một số CPU chính thống thậm chí không cung cấp một NOR
bộ hướng dẫn trình biên dịch chương trình (ví dụ x86 ).
Lựa chọn thay thế
Vấn đề dễ đọc. Và đôi khi nó có thể được cải thiện bằng các phương tiện khác.
Sử dụng các toán tử hiện có
Ví dụ:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
Đặt hàng điều kiện
if x==1 or x==2
action A
else
action B
thay vì
if x!=1 and x!=2
action B
else
action A
Sử dụng cho đến khi vòng lặp
Một số ngôn ngữ cũng cung cấp các hướng dẫn vòng lặp cho phép diễn đạt các điều kiện bằng while
hoặc với until
, cho phép bạn chọn cách "tích cực" hơn. Những hướng dẫn này ví dụ until c do ...
trong ruby , do until c ...
trong vb , hoặc repeat ... until c
trong pascal và con cháu của mình.
Ví dụ:
Until (x==1 or x==2) do
...
tương đương với:
While (x!=1 and x!=2)
...
Tạo một chức năng
Bây giờ nếu bạn vẫn thích nor
cú pháp, bạn có thể xác định hàm, nhưng chỉ khi bạn không mong đợi một phím tắt xảy ra:
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
Có một lợi thế dễ đọc của hàm so với toán tử, bởi vì người đọc ngay lập tức hiểu rằng phủ định áp dụng cho tất cả các đối số. Trong một số ngôn ngữ, bạn có thể định nghĩa một hàm với số lượng đối số thay đổi.
or
và!
, bởi vì tiêu cực kép hiếm khi được sử dụng - hầu hết mọi người đều thấy chúng đặc biệt khó đọc.