“สวัสดี อามีโก้!”
"ตอนนี้ เราจะมีบทเรียนเล็กๆ น้อยๆ เกี่ยวกับตัวดำเนินการเชิงตรรกะ"
"คุณรู้จักตัวดำเนินการเชิงตรรกะอะไรบ้าง"
— หรือ (||) และ (&&) ไม่ใช่(!)
"ใช่ ทำได้ดีมาก คุณจำวิธีการทำงานได้ไหม"
"ใช่."
"OR ให้ผลจริงเมื่อตัวถูกดำเนินการอย่างน้อยหนึ่งตัวเป็นจริง"
"AND เป็นจริงเมื่อตัวถูกดำเนินการทั้งสองเป็นจริง"
"ไม่เปลี่ยนจริงเป็นเท็จ และเท็จเป็นจริง"
"ถูกต้องแล้ว ตัวดำเนินการได้รับการประเมินในนิพจน์นี้ในลำดับใด"
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = a && b || !c && b || !a;
"ทั้งหมดนี้ง่ายมาก"
"อันดับแรก ไม่ใช่ (!) จากนั้น AND (&&) และ OR (||) ที่ส่วนท้ายสุด"
ถ้าเราใส่วงเล็บเข้าไป เราจะได้:
boolean a = true;
boolean b = false;
boolean c = true;
boolean result = (a && b) || ((!c) && b) || (!a);
"ถูกต้อง เรียบร้อยดี ผลเป็นอย่างไร"
— 1) (a && b) == (จริง && เท็จ) == เท็จ
2) ((!c) && b) == (เท็จ && เท็จ) == เท็จ
3) (!a) == เท็จ
4) เท็จ || เท็จ || เท็จ == เท็จ
"ผลลัพธ์เป็นเท็จ"
"ดูเหมือนว่าคุณจะรู้เรื่องนี้เป็นอย่างดี ถ้าอย่างนั้นฉันจะบอกความลับเล็กๆ น้อยๆ ให้คุณฟัง"
"ขั้นแรก นิพจน์เชิงตรรกะจะถูกประเมินจากซ้ายไปขวา"
"ประการที่สอง ใช้การประเมินการลัดวงจรที่นี่ (การคำนวณจะดำเนินการในกรณีที่จำเป็นเท่านั้น) หากทราบผลลัพธ์สุดท้ายจากการประเมินส่วนหนึ่งของนิพจน์แล้ว นิพจน์ที่เหลือจะไม่ถูกประเมิน"
boolean result = (true && false) || (true && true) || (true && false);
"นิพจน์นี้แบ่งออกเป็นสามส่วนโดยคั่นด้วยตัวดำเนินการ OR (||)"
"ถ้าอย่างน้อยหนึ่งส่วนเป็นจริง คำตอบจะเป็นจริงและไม่ต้องพิจารณาอย่างอื่น ดังนั้น นิพจน์จะถูกประเมินดังนี้:"
1) ประเมินส่วนแรก: (จริง && เท็จ) == เท็จ
2) ประเมินส่วนที่สอง: (จริง && จริง) == จริง
3)เราไม่ประเมินส่วนที่สาม เนื่องจากเป็นที่ชัดเจนอยู่แล้วว่าคำตอบจะเป็นจริง .
"วิธีนี้เรียกอีกอย่างว่าการประเมินแบบขี้เกียจ"
"ตกลง แล้วมันพิเศษยังไงล่ะ?"
"ไม่มีอะไร - จนกว่าคุณจะเริ่มเรียกใช้เมธอดภายในนิพจน์ ถ้าบางส่วนของนิพจน์ถูกข้ามไป เมธอดในส่วนที่ถูกข้ามจะไม่ถูกเรียกใช้"
"แต่วิธีการนี้กลายเป็นเรื่องธรรมดาไปแล้ว นี่คือเหตุผล:"
Job job = null;
if (job != null && job.isDone())
{
…
}
"หากงานเป็นโมฆะเมื่อนิพจน์ได้รับการประเมิน การเรียก job.isDone() จะไม่เกิดขึ้น!"
"แท้จริงแล้ว ส่วนแรกของนิพจน์เป็นเท็จ ซึ่งตามด้วย AND (&&) ดังนั้น นิพจน์ทั้งหมดจะเป็นเท็จ และส่วนที่สองก็ไม่จำเป็น"
“แน่นอน มันเป็นเทคนิคที่ดีใช่ไหม”
"ใช่."
GO TO FULL VERSION