Code เป็นแล้ว Code ดีไหม ?

code_work_or_code_good

หลายๆคนที่เป็นนักพัฒนาโปรแกรม ( Programmer ) นั้นคงมีหลายครั้งในชีวิตที่เจอปัญหาว่า Code ตัวเองอ่านไม่ออกภายหลังจากที่เคยทำไปเมื่อ 3 เดือนที่แล้ว หรือไปเจองานที่ต้องทำต่อจากคนอื่นๆ ทำให้หัวเสีย จะดีไหมหากเรามาเริ่มทำให้ให้การเขียน Code ของเรานั้นดีกว่าเดิม อ่านง่ายขึ้น และไม่ต้องให้ตัวเองในอนาคตมาด่าเราในวันนี้

Credit

ขอพูดถึง Credit ก่อนเลยแล้วกันบทความนี้ผมพยายามนำมาปรับใช้โดยจะทำเป็นตัวอย่างเสริมจากบทความเดิมครับ ไปติดตามอ่านกันที่นี่เลยครับ http://www.somkiat.cc/rule-for-readability-code-from-crisp/ และต้นบทความที่นี่ภาษาอังกฤษนะครับ http://blog.crisp.se/2015/03/05/perlundholm/7-rules-on-code-readability

7 ข้อของการเขียน Code ที่ดีขึ้น

1. เรียบเรียงใหม่ในสิ่งที่คุณเขียนซะ

หลายครั้งที่เราจะเขียน Code แบบเพื่อผลลัพธ์ก่อน แน่ล่ะสิ ! ผมก็เป็นหนึ่งในกลุ่มนี้ ( ฮา ) ข้อนี้ง่ายๆครับ เมื่อคุณได้ทำให้ Code ของคุณทำงานตามคำสั่งแล้ว ก็ปรับ Code ให้ทำงานเหมือนเดิมแต่อ่านให้ง่ายขึ้นครับ ตัวอย่างเช่น

// Code Work
function plus() 
{

   if( isset($a) && isset($b) ) 
   {
        return $a + $b;

   } 

}

// Code good

function Addition ()
{
    $isValueAHasSetAndValueBHasSet = isset($a) && isset($b);

    if ( $isValueAHasSetAndValueBHasSet )
    { 
        return $a + $b;

    }

}

สังเกตุว่าคนมาอ่านอันหลังจะเข้าใจได้ง่ายเพราะทุกคนอาจจะไม่เข้าใจ Logic ของเราตอนเขียนก็ได้ครับ

2. พยายามอย่าใช้ Comment ครับ

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

3. ตั้งชื่อตัวแปรให้ดี

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

// Bad
$car = 'red';
$beforeCar = 'green';

// Good
$currentCar = 'red';
$previousCar = 'green';

หากนึกคำไม่ออกแนะนำให้ถามคนอื่นหรือคนในทีมดูครับ ที่ผมใช้คำว่า before คือบางคนนึกไม่ออกจริงๆว่าก่อนหน้า เป็นคำว่า previous แต่ใช้คำเหมือนเวลาเรานึกคำอังกฤษง่ายๆ จึงใช้คำว่า before ที่แปลว่าก่อน มันจะงงมาก

4. พยายามออกจากการวนลูปของลูปของลูปของ ….

 

หลายครั้งเรามักต้องวนเอาข้อมูลอย่างหนึ่ง เพื่อเอาข้อมูลจากการวนรอบแรกไป วนหาข้อมูลอื่นๆในรอบที่สอง และทำเหมือนเดิมอีก พยายามแตกการทำงานออกมาเป็น method เมื่อทำแล้วเราจะไม่เห็นเป็นการลูปในลูปในลูปทำนองนี้ครับตัวอย่าง

// Bad
foreach($carRecords as $car)
{
   foreach($car as $name => $color )
   {
      foreach($color as $colorName)
      {
          // do something..
      }
   }
}

// Good

function getCarValueFromDB($carRecords)
{
    foreach($carRecors as $car)
    {
       getCarColor($car);
    }
}

function getCarColr($car)
{
   foreach($car as $name => $color)
   {

   }
}

5. ให้แค่ 7 บรรทัดเท่านั้น

ไม่ใช่การอ่านของคนไทยแต่อย่างใด แต่เป็นการบังคับว่าเวลาเขียน function หรือ method ให้เขียนไม่เกิน 7 บรรทัด แต่ตอนแรกคุณไม่ต้องใส่ใจก่อนก็ได้ พอเห็น Code ทำงานเยอะๆแล้วค่อนมาแยกหลังจากที่ Code ทำงานถูกต้องก็ได้ครับ แต่ต้องทำ หรือทำเลยตอนที่กำลังแตกหาก ณ ตอนนั้นสามารถทำได้ โดยการทำอย่างนี้ทำให้เรารู้ว่า method ไหนมันเริ่มยาว และไม่ได้ทำงานเพียงหน้าที่เดียวแล้วทำนองนี้ครับ

6. Formatting Code ร่วมกัน

เวลาทำงานก็ตกลงกันก่อนว่าจะวางอะไรอย่างไร เช่น หลัง if จะเคาะ space ไหม หรือว่าตัวปีกกานั้นจะให้ลงมาบรรทัดไหนอย่างไร ซึ่งหลักสากลมีเยอะมากลองหาอ่านแล้วเอาสากลมาเป็นที่ตั้งก่อนแล้วทำการปรับใช้กับทีมอีกทีก็ได้ครับ

7. ถ้าอ่านไม่ออกเขียนใหม่ซะ

อะไรที่เราอ่าน Code ไม่ออกให้ปรับใหม่โดยเราจะต้องเขียน Test ด้วยเพราะการเขียนใหม่สำหรับส่วนนั้นๆเราจะไม่มีทางรู้เลยว่า Code เราที่ทำใหม่อ่านออกแต่ทำงานได้ดีเหมือนเดิมหรือเปล่า หากต้อง Rewrite ทุกครั้งต้องจำไว้เลยว่าต้องเขียน Test ครับ

หากคุณเขียน Test ไม่เป็นเลยหรืออยากเริ่มต้น แนะนำตอนนี้ผมได้สร้างกลุ่มสำหรับการฝึกฝนเขียน Code ให้ดีขึ้นอยู่กับพี่รูฟและเทพอีกหลายๆท่านโดยเราจะค่อยๆฝึกฝนจาก โจทย์ง่ายๆ หากผู้อ่านสนใจสามารถกดมาเข้ากลุ่มเรียนรู้และแชร์ประสบการณ์ได้ครับที่นี่เลย

https://www.facebook.com/groups/973770372648242/
Loading

เป็นโปรแกรมเมอร์ที่ตามหาคุณค่าของชีวิตและความฝันในวัยเด็ก ชอบเล่นเกม เรียนรู้ทุกอย่าง ชอบเจอคนใหม่ๆ งานสังคมทุกชนิด ออกกำลังกายในวันว่าง อ่านหนังสือ มีเว็บรีวิวหนังสือด้วย www.readraide.in.th