IF.EAGER ทำงานเหมือน IF แต่ใช้แผน eager ที่อาจประเมินทั้ง value_if_true และ value_if_false ทำให้ควรระวังเรื่อง performance และกรณีที่อีกแขนงอาจเกิด error แม้เงื่อนไขจะไม่เลือกแขนงนั้น
=IF.EAGER(<LogicalTest>, <ValueIfTrue>[, <ValueIfFalse>])
=IF.EAGER(<LogicalTest>, <ValueIfTrue>[, <ValueIfFalse>])
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| LogicalTest | logical | Yes | เงื่อนไขที่ต้องการทดสอบ (TRUE/FALSE) | |
| ValueIfTrue | expression | Yes | ค่าที่คืนเมื่อ LogicalTest เป็น TRUE | |
| ValueIfFalse | expression | Optional | BLANK() | ค่าที่คืนเมื่อ LogicalTest เป็น FALSE |
บางกรณีอยากให้ทั้งสองฝั่งถูกคำนวณเพื่อดูผล/ตรวจคุณภาพ
ใช้เมื่อคุณตั้งใจให้ทั้งสองฝั่งถูกประเมิน (ต้องเข้าใจผลกระทบก่อน)
ผลลัพธ์ = IF.EAGER([Flag] = 1, "ใช่", "ไม่ใช่")ผลลัพธ์ = IF.EAGER([Flag] = 1, "ใช่", "ไม่ใช่")
คืนข้อความตามเงื่อนไข
ตัวอย่างที่ควรระวัง = IF.EAGER( [Denominator] = 0, BLANK(), [Numerator] / [Denominator] )ตัวอย่างที่ควรระวัง =
IF.EAGER(
[Denominator] = 0,
BLANK(),
[Numerator] / [Denominator]
)
อาจยังเกิด error ได้ ถ้าระบบประเมินแขนงการหารด้วย
ปลอดภัยกว่า = IF( [Denominator] = 0, BLANK(), [Numerator] / [Denominator] )ปลอดภัยกว่า =
IF(
[Denominator] = 0,
BLANK(),
[Numerator] / [Denominator]
)
โดยทั่วไปอ่านง่ายและคุมความเสี่ยงเรื่อง eager evaluation ได้ดีกว่า
IF.EAGER ให้พฤติกรรมการประเมินแบบ eager ที่บางครั้งช่วยรูปแบบคิวรี/สถานการณ์เฉพาะ แต่ต้องใช้ด้วยความเข้าใจ เพราะอาจทำให้ทั้งสองแขนงถูกประเมิน
แนะนำ DIVIDE เพราะออกแบบมาสำหรับการหารและการจัดการตัวหารเป็นศูนย์โดยตรง หรือใช้ IF ปกติร่วมกับเงื่อนไขก็ได้
IF.EAGER ทำงานคล้าย IF: ตรวจเงื่อนไขแล้วคืนค่าตามกรณีจริง/เท็จ แต่ต่างกันตรงที่ IF.EAGER มีแนวโน้มจะใช้แผนการทำงานแบบ eager ซึ่งอาจทำให้ระบบประเมินค่าทั้งแขนงจริงและแขนงเท็จ (ขึ้นกับบริบทและแผนการคิวรี)
ดังนั้น IF.EAGER อาจไม่เหมาะกับกรณีที่คุณหวัง “short-circuit” เพื่อหลีกเลี่ยง error หรือหลีกเลี่ยงการคำนวณหนักในแขนงที่ไม่ได้ถูกเลือก หากต้องการพฤติกรรมแบบนั้น ให้ใช้ IF ปกติ