Câu trả lời:
Nó được gọi là Toán tử có điều kiện (là toán tử ternary ).
Nó có dạng : condition
? value-if-true
: value-if-false
Hãy nghĩ về ?
"sau đó" và :
"khác".
Mã của bạn tương đương với
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
addition
toán tử nhị phân hoạt động trên các biểu thức trước và sau (ví dụ 1 + 2 phép cộng hoạt động trên 1 và 2), hoặc phủ định là toán tử đơn nguyên (ví dụ -x trong đó giá trị của x bị phủ định).
Điều này có lẽ rõ ràng hơn một chút khi được viết với dấu ngoặc như sau:
hsb.s = (max != 0) ? (255 * delta / max) : 0;
Những gì nó làm là đánh giá phần trong ngoặc đầu tiên. Nếu kết quả là đúng thì phần sau? và trước khi: được trả lại. Nếu nó sai, thì cái gì sau: được trả về.
? :
Đây không phải là nhà điều hành ternary?
var x= expression ? true:false
?: là một điều kiện ngắn hạn cho else {}
và if(){}
các vấn đề. Vì vậy, mã của bạn có thể hoán đổi cho nhau:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
Hãy cẩn thận với điều này. A -1 đánh giá là đúng mặc dù -1! = True và -1! = False. Tin tôi đi, tôi đã thấy nó xảy ra.
vì thế
-1? "bên đúng": "bên sai"
đánh giá là "bên thực sự"
Infinity
(gây ra bởi chia cho 0).