Ternary Operator ใน Java

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