จงหยุดใช้ Yoda Condition!

Nuttavut Thongjor

เคยไหมที่บทสนทนาชวนสับสนเพราะการสลับข้างของรูปประโยค? แทนที่จะพูดว่า รถของฉันมีสีแดง แต่กลับบอกว่า มีสีแดงคือรถฉัน แทน?

หากใครเคยดูภาพยนตร์ Star Wars มาก่อน คงต้องรู้จักกับปรมาจารย์เจไดอย่างโยดา ด้วยบุคลิกที่พูดจาย้อนกลับเหมือนที่ยกตัวอย่างข้างต้น เขาจึงได้เป็นหนึ่งในศัพท์แสงของวงการเขียนโปรแกรม และนั่นคือที่มาของ Yoda condition

Yoda

Yoda condition คืออะไร

ชั่วชีวิตของการเขียนโปรแกรมต้องมีซักครั้งหละ เราต้องการเปรียบเทียบค่าแต่ดันใช้เครื่องหมายกำหนดค่าแทนในประโยคเงื่อนไข

JavaScript
1if ((gender = 'male')) {
2 console.log('ไปเตะบอลกัน')
3}

รูปประโยคข้างบนเราต้องการเปรียบเทียบเพศกับคำว่า male แต่ดันใส่เครื่องหมายผิดไปนิด ความเป็นจริงต้องใส่ == แต่แบบช่วงนี้รัฐบาลให้ประหยัดไง เลยเหลือแค่ = ตัวเดียว

เพื่อป้องกันความผิดพลาดที่เผลอใช้เครื่องหมายผิดประเภท รูปแบบการเขียนใหม่จึงเกิดขึ้น

JavaScript
1if (('male' = gender)) {
2 console.log('ไปเตะบอลกัน')
3}

ย้ายค่าที่ต้องการเทียบมาไว้ซ้ายมือแทน แล้วโยนตัวแปรไปไว้ขวามือ เพียงเท่านี้หากเราเผลอใช้ = แทน == ตัวแปลภาษาก็จะกร่นด่าแบบไม่ใยดี เพราะมันไม่อนุญาตให้เรากำหนดค่าให้กับ male ได้

ด้วยความที่สลับตำแหน่งแบบย้อนกลับเช่นนี้อันเป็นสไตล์การพูดของลุงโยดา เราจึงเรียกประโยคเงื่อนไขแบบนี้ว่า Yoda condition

Yoda condition กับมาตรฐานการเขียนโค๊ด

แม้รูปประโยคแบบโยดาจะดูขัดใจ แต่ก็มีหลายเจ้าที่ใช้รูปแบบนี้เป็นมาตรฐานการเขียนโค๊ด เช่น Wordpress

Code
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