ฉันมาข้ามบรรทัดต่อไปนี้
hsb.s = max != 0 ? 255 * delta / max : 0;
สิ่งที่?
และ:
หมายถึงอะไรในบริบทนี้
ฉันมาข้ามบรรทัดต่อไปนี้
hsb.s = max != 0 ? 255 * delta / max : 0;
สิ่งที่?
และ:
หมายถึงอะไรในบริบทนี้
คำตอบ:
มันถูกเรียกว่าผู้ประกอบการเงื่อนไข (ซึ่งเป็นผู้ประกอบการประกอบไปด้วย)
มันมีรูปแบบของ: condition
? value-if-true
: value-if-false
คิดว่า?
"แล้ว" และ:
"อื่น ๆ "
รหัสของคุณเทียบเท่า
if (max != 0)
hsb.s = 255 * delta / max;
else
hsb.s = 0;
addition
กับตัวดำเนินการไบนารีที่ทำงานกับนิพจน์ก่อนหน้าและต่อไปนี้ (เช่น 1 + 2 บวกกับทำงานบน 1 และ 2) หรือปฏิเสธเป็นตัวดำเนินการเอก (เช่น -x โดยที่ค่าของ x ถูกลบล้าง)
วงเล็บอย่างถูกต้องเพื่อความชัดเจนมันเป็น
hsb.s = (max != 0) ? (255 * delta / max) : 0;
ความหมายกลับมาอย่างใดอย่างหนึ่ง
255*delta/max
ถ้าสูงสุด! = 00
ถ้าสูงสุด == 0นี่อาจจะค่อนข้างชัดเจนเมื่อเขียนด้วยวงเล็บดังนี้
hsb.s = (max != 0) ? (255 * delta / max) : 0;
มันคืออะไรประเมินส่วนในวงเล็บแรก หากผลลัพธ์เป็นจริงแล้วส่วนหลัง? และก่อน: ถูกส่งคืน ถ้ามันเป็นเท็จแล้วสิ่งต่อไปนี้: จะถูกส่งกลับ
hsb.s = max != 0 ? 255 * delta / max : 0;
?
เป็นผู้ประกอบการที่สาม มันทำงานเหมือนif
ร่วมกับ:
!=
หมายถึงไม่เท่ากับ
ดังนั้นรูปแบบยาวของเส้นนี้จะเป็น
if (max != 0) { //if max is not zero
hsb.s = 255 * delta / max;
} else {
hsb.s = 0;
}
? :
นี่ไม่ใช่ผู้ประกอบการที่สามหรือไม่
var x= expression ? true:false
?: เป็นเงื่อนไขสั้น ๆ สำหรับelse {}
และif(){}
ปัญหา ดังนั้นรหัสของคุณสามารถใช้แทนกันกับสิ่งนี้:
if(max != 0){
hsb.s = 225 * delta / max
}
else {
hsb.s = 0
}
ระวังด้วยนะ -1 ประเมินเป็นจริงแม้ว่า -1! = จริงและ -1! = เท็จ เชื่อใจฉันฉันเห็นมันเกิดขึ้น
ดังนั้น
-1 "ด้านที่แท้จริง": "ด้านที่ผิด"
ประเมินเป็น "ด้านที่แท้จริง"
Infinity
(เกิดจากหารด้วยศูนย์)