Screen Shot 2558-02-23 at 5.48.09 PM
วันนี้อ่านเจอ code แบบนี้

สิ่งที่เจอครั้งแรก ก็ถามกับตัวเองว่า

ทำไมถึงเขียน code แบบนี้ ?

มาลองค้นหาเหตุผลหน่อย เพื่อบอกว่ามันไม่ถูกนะเออ !!

If-else มันมาจากแนวคิดของ procedural programming

โดยจาก code ถ้าค่าของตัวแปร x น้อยกว่า 0 จะทำการโยน exception ออกไป
แต่ถ้าค่าของตัวแปร x มากกว่า หรือ เท่ากับ 0 จะทำงานปกติ
และสุดท้ายจะทำงานต่อไปเหมือนกัน

โดย code ข้างต้นมันน่าจะเริ่มมาจาก

แต่เราไม่อยากให้ระบบทำงานต่อไป
เราจึงทำการโยน exception ออกมา
เพื่อให้ระบบกลับไปทำงานยังจุดที่เรียกใช้งาน

เปรียบเหมือนกับการขับรถ
ถ้าเราไปเจอป้ายบอกว่า
ทางซ้ายมือให้เฉพาะรถ 10 ล้อขึ้นไปเท่านั้น
ส่วนทางขวาสำหรับรถทั่วไป

แต่ถ้าเราพบว่าทางซ้ายมือมันรถน้อย ส่วนทางขวารถเยอะ
โดยที่ทั้งทางขวา และ ซ้าย สุดท้ายจะไปร่วมที่ทางเดียวกัน
เราจึงมักตัดสินใจไปทางซ้ายมือ !!

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

แต่มันไม่ใช่ประเด็นเท่าไร เพราะว่า code ที่มันควรจะเป็น
คือ ไม่น่าจะมี block else นะครับ ใช่หรือเปล่า ?

ลองจินตนาการสิว่า ถ้า code นี้มันไปอยู่ใน loop ล่ะ

ส่วนใหญ่มักจะเจอแบบนี้ คือ ใช้งาน continue; เข้าไปสิ

แต่คำถามจากการ review code ก็คือ
ใช้แบบนี้น่าจะเข้าใจง่ายกว่าไหม ?

ยังไม่พอ มักจะเจอ code ที่มันน่ากลัวกว่า

ชอบเจอใน code ภาษา PHP คือ
ทำการโยน exception พร้อมใช้งาน exit() เพื่อให้ระบบหยุดทำงาน
ซึ่งผมแนะนำว่า อย่าทำเด็ดขาดนะ !!