วันอาทิตย์ที่ 21 กรกฎาคม พ.ศ. 2556

เทคนิคเกี่ยวกับการใช้ if .... else


ไม่ควรใช้ if (not...) then ... else
ผมว่ามันตลกนะ ถ้าแบบมีคนสั่งว่า "ถ้าไม่มีป้ายบอกทางว่าเลี้ยวซ้ายผ่านตลอด ให้หยุดรอสัญญาณไฟ นอกเหนือจากนั้นแล้วให้เลี้ยวซ้ายผ่านไป" ..

คือมันเป็นการใช้ปฎิเสธซ้อนปฎิเสธน่ะครับ ถ้าเป็นคนปรกติพูดเราก็จะพูดกันว่า "ถ้ามีป้ายบอกว่าเลี้ยวซ้ายผ่านตลอดก็เลี้ยวซ้ายผ่านไป แต่ถ้าไม่มีให้หยุดรอสัญญาณไฟ" มากกว่าใช่ไหมครับ

เวลาเขียนโปรแกรมก็เหมือนกัน ผมคิดว่าเราไม่ควรใช้ปฎิเสธซ้อนปฎิเสธครับ อย่างโค๊ดข้างล่างนี่
if(!recordAvailable())
    createNew();
else
    updatePresent();
เวลาเขียนก็ควรเป็นแบบนี้มากกว่า
if(recordAvailable())
    updatePresent();
else
    createNew();
ผมว่ามันอ่านง่ายกว่านะ

ใช้ if(not success) เพื่อออกจากโปรแกรม แทนที่จะใช้ if(sucess) แล้วทำต่อ
หลาย ๆ ฟังก์ชั่นจะคืนค่าเป็น error code กลับมา ถ้าเกิดว่าเราเขียนว่า if (success) แล้วทำต่อเนี่ยมันจะกลายเป็นการสร้าง  statement ย่อย ๆ เพิ่ม พอยิ่งพ่วงกันยาว ๆ แล้วมันก็จะยิ่งเพิ่มระดับของ statement  ไปเรื่อย ๆ จะทำให้โค๊ดอ่านยากครับ

อย่างเช่นโค๊ดแบบนี้
int init()
{
 if(initVideo() == SUCCESS)
 {
  if(initAudio() == SUCCESS)
  {
   if(initDatabase == SUCCESS)
   {
    return SUCCESS;
   }
  }
 }

 cleanUp();
 return FAILED;
}
เกิดมีสัก 10 ฟังก์ชั่นนี่ตายเลย แถมเขียนผิดไปสักระดับหนึ่งนี่ไล่หากันไปเถอะครับ เขียนแบบนี้แทนอ่านง่ายกว่าเยอะครับ
int init()
{
 if(initVideo() == FAILED)
 {
  cleanUp();
  return FAILED;
 }
 if(initAudio() == FAILED)
 {
  cleanUp();
  return FAILED;
 }
 if(initDatabase == FAILED)
 {
  cleanUp();
  return FAILED;
 }

 return SUCCESS;
}
credit: Wutipong Wongsakuldej