JavaRush /จาวาบล็อก /Random-TH /เงื่อนไขของโยดา
MAX
ระดับ
Киров

เงื่อนไขของโยดา

เผยแพร่ในกลุ่ม
โพสต์สั้น ๆ มีไว้สำหรับแฟน ๆ ทุกคนของ Star Wars และ Java / JavaRush เพื่อเป็นเกียรติแก่วันครบรอบ 40 ปีของการเปิดตัว Episode V ของ star saga! เงื่อนไขของโยดา - 1บางครั้งคุณสามารถพบสิ่งที่น่าสนใจมากมายบนอินเทอร์เน็ต และเมื่อวันก่อนฉันได้พบกับการฝึกเขียนโปรแกรมที่ค่อนข้างตลกตั้งแต่แรกเห็นที่เรียกว่าเงื่อนไขของ Yoda กล่าวโดยสรุป เงื่อนไข Yoda (รวมถึงสัญลักษณ์ Yoda) คือรูปแบบการเขียนโปรแกรมที่นิพจน์การเปรียบเทียบที่คุ้นเคยสองส่วนในคำสั่งแบบมีเงื่อนไขจะถูกกลับรายการ:
if (5 == a) {
    // do something
}
สไตล์นี้สามารถใช้ได้กับภาษาที่มีไวยากรณ์คล้าย C ซึ่งส่วนใหญ่มักใช้ในสำนวนด้วย ifและwhile
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
เหตุใดจึงต้องเลื่อนนิพจน์คงที่ไปทางด้านซ้ายของตัวดำเนินการเปรียบเทียบ สมมติว่าสถานการณ์สมมติซึ่งหลังจากการดูทั้งเก้าหกส่วนของ Saga แบบมาราธอน เราก็นั่งลงโดยไม่ได้นอนเพื่อเขียนโค้ดสำหรับโปรเจ็กต์สัตว์เลี้ยงของเราและเขียนข้อความต่อไปนี้:
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
ในกรณีนี้ ทุก ครั้ง ที่คุณรันโปรแกรม คุณจะได้รับสตริงNumber is 13"โดยไม่คำนึงถึงอาร์กิวเมนต์ที่ส่งаไปยังเมธอด checkNumber(int a)นี่ไม่ใช่สิ่งที่เราคาดหวัง! ข้อผิดพลาดเชิงตรรกะสามารถเกิดขึ้นได้ค่อนข้างบ่อยในหมู่โปรแกรมเมอร์มือใหม่ (เชื่อฉันเถอะฉันรู้) แต่ในขั้นตอนการคอมไพล์ โค้ดเช่น 13 = a จะทำให้เกิดข้อผิดพลาด ซึ่งเราจะไม่มองข้ามอย่างแน่นอน เนื่องจากค่าจำนวนเต็มเป็นค่าคงที่ ดังนั้นจึงไม่สามารถเปลี่ยนแปลงได้ (เปลี่ยนเป็น "a") เงื่อนไขของโยดา - 1

การใช้เงื่อนไขของ Yoda มีทั้งข้อดีและข้อเสีย

ด้านแสง:

  1. ป้องกันการมอบหมายให้กับตัวแปรเมื่อเป้าหมายของเราคือการเปรียบเทียบ

  2. แก้ไขปัญหา "Null Behavior" ที่ไม่ปลอดภัย ( NullPointerException) // ตัวอย่างจาก Wikipedia

  3. หากไม่มีโยดา:

    String myString = null;
    if (myString.equals("foobar")) { /* ... */ }
    // This causes a NullPointerException in Java

    กับโยดา:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

ด้านมืด:

  1. ความสามารถในการอ่านโค้ดสำหรับผู้ที่จะดูโค้ดของคุณมีความซับซ้อนมากขึ้น ทำให้ภาระในการรับรู้โค้ดเพิ่มมากขึ้น
  2. ขอบเขตแคบ ใช้เฉพาะการเปรียบเทียบความเท่าเทียมกันหรือการเปรียบเทียบกับค่าคงที่ ตรวจสอบค่าว่าง
  3. คอมไพเลอร์หลายราย "เห็น" ข้อผิดพลาดประเภทนี้แล้วและเตือนล่วงหน้าเกี่ยวกับข้อผิดพลาดที่อาจเกิดขึ้น
อีกทางเลือกหนึ่งสำหรับสัญกรณ์ Yoda อาจเป็นการทดสอบหน่วย ในสมัยของสาธารณรัฐเก่า กล่าวกันว่าการทดสอบที่ดีจะช่วยให้มั่นใจได้ว่าโค้ดจะปราศจากข้อผิดพลาดและทำตามที่เขียนไว้เท่านั้น คุณรู้แนวทางปฏิบัติที่เป็นประโยชน์อะไรบ้าง? แบ่งปันความรู้ของคุณในความคิดเห็น! และยังเขียนตอนที่คุณชื่นชอบอีกด้วย! และขอพลังจงสถิตอยู่กับคุณ!
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION