เทคนิคเกี่ยวกับการใช้ if …. else (ตอนที่ 2)

มาพูดเรื่องเดิม ๆ แต่ว่าเป็นเนื้อหาใหม่ครับ พูดเป็นเรื่องสั้น ๆ อีกสักสองเรื่องละกัน

ไม่ควรใช้ 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;
}

ง่ายกว่าเห็นไหมครับ ? ที่จริงก็ดูมันซ้ำซ้อนกันบ้าง แต่ว่าแบบนี้เราจะหาจุดที่ผิดพลาดได้ง่ายกว่ามากครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.