1. ภาพรวม
ผู้ประกอบการที่มีเงื่อนไข ternary :ช่วยให้เราสามารถกำหนดนิพจน์ใน Java มันเป็นรูปแบบย่อของคำสั่งif-elseที่คืนค่าด้วย
ในบทช่วยสอนนี้เราจะได้เรียนรู้ว่าจะใช้โครงสร้างด้านท้ายเมื่อใดและอย่างไร เราจะเริ่มต้นด้วยการดูไวยากรณ์ตามด้วยการสำรวจการใช้งาน
2. ไวยากรณ์
ผู้ประกอบการ ternary :ใน Java เป็นผู้ประกอบการเท่านั้นที่รับสามตัวถูกดำเนินการ :
booleanExpression ? expression1 : expression2
ตัวถูกดำเนินการตัวแรกต้องเป็นนิพจน์บูลีนตัวถูกดำเนินการที่สองและตัวที่สามสามารถเป็นนิพจน์ใด ๆ ที่ส่งคืนค่าบางค่า ผลตอบแทนที่ได้ ternary สร้างExpression1เป็นเอาท์พุทถ้าประเมินตัวถูกดำเนินการครั้งแรกที่จริง , Expression2มิฉะนั้น
3. Ternary Operator ตัวอย่าง
ลองพิจารณาโครงสร้างif-elseด้านล่าง:
int num = 8; String msg = ""; if(num > 10) { msg = "Number is greater than 10"; } else { msg = "Number is less than or equal to 10"; }
ในโค้ดข้างต้นที่เราได้รับมอบหมายมูลค่าให้กับผงชูรสอยู่บนพื้นฐานของการประเมินผลตามเงื่อนไขของNUM เราสามารถทำให้โค้ดนี้อ่านง่ายและปลอดภัยมากขึ้นโดยแทนที่คำสั่งif-elseด้วยโครงสร้างท้าย:
final String msg = num > 10 ? "Number is greater than 10" : "Number is less than or equal to 10";
4. การประเมินนิพจน์
เมื่อใช้สร้าง ternary ชวาเพียงหนึ่งในการแสดงออกทางด้านขวามือคือทั้งExpression1หรือExpression2คือการประเมินที่รันไทม์
เราสามารถทดสอบได้โดยการเขียนกรณีทดสอบJUnitอย่างง่าย:
@Test public void whenConditionIsTrue_thenOnlyFirstExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 12 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(1); assertThat(exp2).isEqualTo(0); assertThat(result).isEqualTo(1); }
เราบูลแสดงออก12> 10เสมอประเมินจริงดังนั้นค่าของexp2ยังคงเป็นคือ ในทำนองเดียวกันลองพิจารณาสิ่งที่เกิดขึ้นสำหรับเงื่อนไขเท็จ :
@Test public void whenConditionIsFalse_thenOnlySecondExpressionIsEvaluated() { int exp1 = 0, exp2 = 0; int result = 8 > 10 ? ++exp1 : ++exp2; assertThat(exp1).isEqualTo(0); assertThat(exp2).isEqualTo(1); assertThat(result).isEqualTo(1); }
ค่าexp1ยังคงไม่ถูกแตะต้องและค่าของexp2จะเพิ่มขึ้นด้วย 1
5. ตัวดำเนินการที่ทำรัง
เป็นไปได้ที่เราจะซ้อนตัวดำเนินการสามระดับของเราไปยังระดับใดก็ได้ที่เราเลือก ดังนั้นโครงสร้าง:
String msg = num > 10 ? "Number is greater than 10" : num > 5 ? "Number is greater than 5" : "Number is less than equal to 5";
ถูกต้องใน Java เพื่อปรับปรุงความสามารถในการอ่านโค้ดด้านบนเราสามารถใช้วงเล็บปีกกา() ได้ทุกที่ที่จำเป็น:
String msg = num > 10 ? "Number is greater than 10" : (num > 5 ? "Number is greater than 5" : "Number is less than equal to 5");
อย่างไรก็ตาม,โปรดทราบว่ามันไม่ได้แนะนำให้ใช้เช่นโครงสร้าง ternary ซ้อนกันอย่างลึกซึ้งในโลกจริง ซึ่งทำให้โค้ดอ่านได้น้อยลงและดูแลรักษายาก
6. บทสรุป
ในบทช่วยสอนฉบับย่อนี้เราได้เรียนรู้เกี่ยวกับตัวดำเนินการ ternary ใน Java ไม่สามารถแทนที่โครงสร้างif-elseทุกตัวด้วยตัวดำเนินการด้านท้าย อย่างไรก็ตามมันเป็นเครื่องมือที่ยอดเยี่ยมสำหรับบางกรณีและทำให้โค้ดของเราสั้นลงและอ่านได้มาก
ตามปกติซอร์สโค้ดทั้งหมดสามารถใช้ได้บน Github