Babel Coder

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

beginner

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

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

Yoda

สารบัญ

Yoda condition คืออะไร

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

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

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

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

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

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

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

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

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

if ( true == $the_force ) {
  $victorious = you_will( $be );
}

เป็นข้อแนะนำสำหรับ Wordpress[1] ว่าให้ตรวจสอบเงื่อนไขตามแบบฉบับของลุงโยดาเฉพาะเครื่องหมาย ==, !=, ===, หรือ !== และจงหลีกเลี่ยงการใช้โยดากับเครื่องหมาย <, >, <= หรือ >=

จงหลีกเลี่ยง Yoda condition

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

สำหรับกลุ่มภาษาที่ไม่มีการป้องกันการกำหนดค่าในประโยคเงื่อนไข เรายังสามารถใช้เครื่องมือจำพวก Linter เพื่อแจ้งเตือนว่าเรากำลังทำสิ่งผิดพลาดอยู่ได้ เช่นการใช้ ESLint


  1. https://make.wordpress.org/core/handbook/best-practices/coding-standards/php/#yoda-conditions


แสดงความคิดเห็นของคุณ


No any discussions