จงหยุดใช้ Yoda Condition!
เคยไหมที่บทสนทนาชวนสับสนเพราะการสลับข้างของรูปประโยค? แทนที่จะพูดว่า รถของฉันมีสีแดง
แต่กลับบอกว่า มีสีแดงคือรถฉัน
แทน?
หากใครเคยดูภาพยนตร์ Star Wars มาก่อน คงต้องรู้จักกับปรมาจารย์เจไดอย่างโยดา ด้วยบุคลิกที่พูดจาย้อนกลับเหมือนที่ยกตัวอย่างข้างต้น เขาจึงได้เป็นหนึ่งในศัพท์แสงของวงการเขียนโปรแกรม และนั่นคือที่มาของ Yoda condition
Yoda condition คืออะไร
ชั่วชีวิตของการเขียนโปรแกรมต้องมีซักครั้งหละ เราต้องการเปรียบเทียบค่าแต่ดันใช้เครื่องหมายกำหนดค่าแทนในประโยคเงื่อนไข
1if ((gender = 'male')) {2 console.log('ไปเตะบอลกัน')3}
รูปประโยคข้างบนเราต้องการเปรียบเทียบเพศกับคำว่า male
แต่ดันใส่เครื่องหมายผิดไปนิด ความเป็นจริงต้องใส่ ==
แต่แบบช่วงนี้รัฐบาลให้ประหยัดไง เลยเหลือแค่ =
ตัวเดียว
เพื่อป้องกันความผิดพลาดที่เผลอใช้เครื่องหมายผิดประเภท รูปแบบการเขียนใหม่จึงเกิดขึ้น
1if (('male' = gender)) {2 console.log('ไปเตะบอลกัน')3}
ย้ายค่าที่ต้องการเทียบมาไว้ซ้ายมือแทน แล้วโยนตัวแปรไปไว้ขวามือ เพียงเท่านี้หากเราเผลอใช้ =
แทน ==
ตัวแปลภาษาก็จะกร่นด่าแบบไม่ใยดี เพราะมันไม่อนุญาตให้เรากำหนดค่าให้กับ male ได้
ด้วยความที่สลับตำแหน่งแบบย้อนกลับเช่นนี้อันเป็นสไตล์การพูดของลุงโยดา เราจึงเรียกประโยคเงื่อนไขแบบนี้ว่า Yoda condition
Yoda condition กับมาตรฐานการเขียนโค๊ด
แม้รูปประโยคแบบโยดาจะดูขัดใจ แต่ก็มีหลายเจ้าที่ใช้รูปแบบนี้เป็นมาตรฐานการเขียนโค๊ด เช่น Wordpress
1if ( true == $the_force ) {2 $victorious = you_will( $be );3}
เป็นข้อแนะนำสำหรับ Wordpress1 ว่าให้ตรวจสอบเงื่อนไขตามแบบฉบับของลุงโยดาเฉพาะเครื่องหมาย ==, !=, ===, หรือ !== และจงหลีกเลี่ยงการใช้โยดากับเครื่องหมาย <, >, <= หรือ >= 1: https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions
จงหลีกเลี่ยง Yoda condition
แม้ลุงโยดาจะมีประโยชน์ แต่ภาษาของลุงนั้นอ่านยากมากครับ มันขัดแย้งกับหลักคิดของมวลมนุษยชาติ จึงถือเป็นหนึ่งในรูปแบบที่เราควรหลีกเลี่ยง นอกจากนี้ภาษาสมัยใหม่ เช่น Python ไม่อนุญาตให้เรากำหนดค่าตัวแปรในประโยคเงื่อนไขอยู่แล้ว จึงไม่มีความจำเป็นที่จะต้องพูดตามลุงโยดาอีกต่อไป
สำหรับกลุ่มภาษาที่ไม่มีการป้องกันการกำหนดค่าในประโยคเงื่อนไข เรายังสามารถใช้เครื่องมือจำพวก Linter เพื่อแจ้งเตือนว่าเรากำลังทำสิ่งผิดพลาดอยู่ได้ เช่นการใช้ ESLint
สารบัญ
- Yoda condition คืออะไร
- Yoda condition กับมาตรฐานการเขียนโค๊ด
- จงหลีกเลี่ยง Yoda condition