Trong phần này, chúng ta sẽ thử giải câu đố Toán tử ternary lồng nhau bằng cách sử dụng ngôn ngữ máy tính. Mã được hiển thị dưới đây minh họa điểm này
#include main[] { int x, y; scanf["%d", &x]; [x == 0] ? y = 0 : [[x > 0] ? [y = 1] : [y = -1]]; printf["%d", y]; }
Chúng tôi đã chỉ ra cách giải quyết vấn đề Toán tử ternary lồng nhau bằng cách xem xét một số trường hợp khác nhau
Chúng ta có thể sử dụng toán tử bậc ba lồng nhau không?
Toán tử ternary lồng nhau. Toán tử bậc ba có thể được lồng vào nhau. 09-Dec-2021
Làm thế nào để bạn viết if-else lồng nhau trong toán tử bậc ba?
Chúng ta có thể có toán tử bậc ba lồng nhau trong JavaScript không?
Bạn có thể lồng một toán tử bậc ba làm biểu thức bên trong một toán tử bậc ba khác để hoạt động như một toán tử bậc ba lồng nhau trong JavaScript. 07-Mar-2022
Bạn có thể xâu chuỗi các nhà khai thác ternary không?
Toán tử bậc ba trong Javascript là một toán tử đặc biệt chấp nhận ba toán hạng. Nó còn được gọi là toán tử "có điều kiện" hoặc "nội tuyến-nếu". Toán tử ternary trong Javascript làm cho mã của chúng tôi rõ ràng và đơn giản hơn. Nó có thể được xâu chuỗi như một if-else nếu. khối if-else khác. 20-Jan-2022
Toán tử bậc ba lồng nhau hoạt động như thế nào?
Mẹo để đọc các biểu thức điều kiện [“ternary”] lồng nhau là đọc chúng dưới dạng biểu thức if-then-else. Các biểu thức if-then-else, nếu chúng tồn tại, sẽ hoạt động chính xác như các câu lệnh if ngoại trừ chúng sẽ chọn giữa các biểu thức thay vì các câu lệnh. Đúng, giải pháp là “c”. 06-Aug-2013
Làm thế nào để bạn sử dụng toán tử ternary cho 3 điều kiện?
Toán tử điều kiện [ternary] là toán tử JavaScript duy nhất có ba toán hạng. một điều kiện theo sau bởi một dấu chấm hỏi [ ? ], sau đó là một biểu thức để thực hiện nếu điều kiện là đúng theo sau bởi một dấu hai chấm [. ], và cuối cùng là biểu thức để thực hiện nếu điều kiện sai. 13-Tháng 9-2022
Làm thế nào để bạn viết một toán tử điều kiện lồng nhau?
cú pháp. [logic_test1]? . false_block]. false_block_outer; . 02-Jul-2020
Đó là một ví dụ về một nhà điều hành ternary?
Thí dụ. C Toán tử bậc ba Ở đây, tuổi >= 18 – điều kiện kiểm tra xem giá trị đầu vào có lớn hơn hoặc bằng 18 không. printf["Bạn có thể bỏ phiếu"] – biểu thức 1 được thực thi nếu điều kiện đúng. printf["Bạn không thể bỏ phiếu"] – biểu thức 2 được thực thi nếu điều kiện sai
Chúng ta có thể sử dụng ternary bên trong ternary không?
Ví dụ: bạn không nên cố gắng tạo các toán tử bậc ba được lồng bên trong các toán tử bậc ba. Mặc dù viết mã theo cách này hoạt động chính xác trong JavaScript nhưng rất khó đọc và hiểu. 09-Nov-2020
Làm cách nào để dừng các toán tử bậc ba lồng nhau?
Trong một số ngôn ngữ lập trình, toán tử bậc ba không phải mà thay vào đó là kết hợp trái. Điều này cho thấy rằng các toán tử bậc ba lồng nhau có thể gây nhầm lẫn và do đó, nên tránh hoặc thực hiện rõ ràng bằng cách thêm dấu ngoặc đơn. 16-Jul-2016
Không giống như hầu hết [tất cả?] các ngôn ngữ khác, toán tử bậc ba trong PHP là liên kết trái hơn là liên kết phải. Hành vi liên kết bên trái thường không hữu ích và gây nhầm lẫn cho các lập trình viên chuyển đổi giữa các ngôn ngữ khác nhau. RFC này đề xuất không dùng nữa và loại bỏ liên kết trái cho toán tử bậc ba và thay vào đó yêu cầu sử dụng dấu ngoặc đơn một cách rõ ràng
Như một ví dụ, mã
return $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'four' : 'other';
trong hầu hết [tất cả?] các ngôn ngữ khác sẽ được hiểu là
return $a == 1 ? 'one' : [$a == 2 ? 'two' : [$a == 3 ? 'three' : [$a == 4 ? 'four' : 'other']]];
đó là cả giải thích hữu ích và trực quan. Trong PHP, thay vào đó, nó được hiểu là
return [[[$a == 1 ? 'one' : $a == 2] ? 'two' : $a == 3] ? 'three' : $a == 4] ? 'four' : 'other';
mà nói chung không phải là những gì đã được dự định
Đề nghị
Trong PHP7. 4 sử dụng các ternaries lồng nhau mà không có dấu ngoặc đơn rõ ràng sẽ đưa ra cảnh báo không dùng nữa. Trong PHP8. 0, thay vào đó, nó sẽ trở thành lỗi thời gian biên dịch
1 ? 2 : 3 ? 4 : 5; // deprecated [1 ? 2 : 3] ? 4 : 5; // ok 1 ? 2 : [3 ? 4 : 5]; // ok
Điều này cũng áp dụng khi trộn cú pháp ngắn và dài ternary
1 ?: 2 ? 3 : 4; // deprecated [1 ?: 2] ? 3 : 4; // ok 1 ?: [2 ? 3 : 4]; // ok 1 ? 2 : 3 ?: 4; // deprecated [1 ? 2 : 3] ?: 4; // ok 1 ? 2 : [3 ?: 4]; // ok
Tuy nhiên, như một ngoại lệ, không cần phải có dấu ngoặc đơn rõ ràng khi kết hợp hai bộ ba ngắn
1 ?: 2 ?: 3; // ok [1 ?: 2] ?: 3; // ok 1 ?: [2 ?: 3]; // ok
Lý do là [$a ?: $b] ?: $c
và
return $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'four' : 'other';0 sẽ luôn mang lại kết quả giống nhau, mặc dù phiên bản liên kết trái sẽ đạt được kết quả đó theo cách kém hiệu quả hơn
Dấu ngoặc đơn cũng không bắt buộc khi lồng vào toán hạng ở giữa, vì điều này luôn rõ ràng và không bị ảnh hưởng bởi tính kết hợp
1 ? 2 ? 3 : 4 : 5 // ok 1 ? 2 ?: 3 : 4 // ok
Toán tử hợp nhất null
return $a == 1 ? 'one' : $a == 2 ? 'two' : $a == 3 ? 'three' : $a == 4 ? 'four' : 'other';1 đã là liên kết phải và không bị ảnh hưởng bởi những thay đổi này
Thay đổi không tương thích ngược
Mã khai thác tính liên kết trái của toán tử bậc ba sẽ trở thành một lỗi nghiêm trọng trong PHP 8. Vì ternaries liên kết bên trái gần như chắc chắn là lỗi, tác động của thay đổi này sẽ là tối thiểu
Một phân tích về 1000 gói tổng hợp hàng đầu đã tìm thấy 12 trường hợp sẽ bị ảnh hưởng bởi RFC này. 9 trong số đó là lỗi, trong đó ý nghĩa liên kết phải được dự định, nhưng ý nghĩa liên kết trái sẽ được sử dụng. 3 cách sử dụng của biểu mẫu
return $a == 1 ? 'one' : [$a == 2 ? 'two' : [$a == 3 ? 'three' : [$a == 4 ? 'four' : 'other']]];0 có khả năng ổn, bởi vì sự khác biệt giữa hai cách hiểu là nhỏ và tôi không rõ cái nào thực sự được dự định. Kết quả phân tích chi tiết có tại https. //ý chính. github. com/nikic/b6214f87b0e4a7c6fe26919ac849194f
Phạm vi tương lai
Chúng tôi có thể tạo liên kết phải bậc ba trong bản phát hành sau, sau khi nó bị lỗi trong một thời gian