หลายๆคนที่เป็นนักพัฒนาโปรแกรม ( 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 ให้ดีขึ้นอยู่กับพี่รูฟและเทพอีกหลายๆท่านโดยเราจะค่อยๆฝึกฝนจาก โจทย์ง่ายๆ หากผู้อ่านสนใจสามารถกดมาเข้ากลุ่มเรียนรู้และแชร์ประสบการณ์ได้ครับที่นี่เลย