Advanced Coding Skills, Techniques and Ideas

10-Aug-18

คัมภีร์เทพ IT

See the original english version Click here!
 

Developer ที่ดีนั้น สามารถดูได้จากคุณภาพ Code ของพวกเขา ซึ่งการเขียน Code ที่ดีนั้น หมายถึง การช่วยประหยัดทั้งงบและเวลาในการ Test, Update, Extend และแก้ Bug เรามาดูตัวอย่างเทคนิคและแนวคิด ในการ Refactoring และเขียน Clean Code เพื่อเพิ่มทักษะ Coding ขั้นสูงกันดีกว่า

Refactoring คืออะไรและเหตุใดถึงต้องใช้มัน

Refactoring คือ การกลับไปปรับปรุง Code เก่าที่เคยเขียนไว้แล้ว ให้ดีขึ้น สั้น กระชับ และมีประสิทธิภาพมากกว่าเดิม นั่นคือช่วยให้คุณเขียน Code ที่ Clean ขึ้น อีกทั้งยังช่วยให้ Developer คนอื่นๆ สามารถ อ่านแล้วเข้าใจ, เขียน Code ต่อยอด และนำ Code มา Reuse ได้ง่าย โดยไม่ต้องแก้ไขอะไรมากมาย ต่อไปมาดูกันว่าเทคนิคการ Refactoring Code เก่าให้ดีขึ้นมีอะไรบ้าง

อย่าเพิ่ง Refactoring Production Code ยังไม่ผ่าน Unit Tests

ข้อแนะนำแรกคือ อย่าเพิ่งทำการ Refactoring Code เก่าของคุณหากยังไม่ผ่านการทำ Unit Tests ที่เหมาะสม เนื่องจากคุณอาจจะลงท้ายด้วยฟังก์ชั่นที่เสียหาย ซึ่งมันยากที่จะแก้ไขเพราะคุณไม่สามารถที่จะรู้ว่ามีอะไรเสียหาย ดังนั้นก่อนจะ Refactoring คุณควรจะ Test มันให้ดีเสียก่อน ลองดูที่ PHPUnit code coverage analysis

เริ่ม Refactoring จากจุดที่ลึกที่สุดของ Code ก่อน

ในตัวอย่างด้านล่างนี้ เป็นของ Project จริงๆ เกี่ยวกับ Hotel Management System ที่พบใน Github

จากใน Method ด้านบน คุณจะเห็นว่ามีอยู่ 3 Levels สำหรับ Code ส่วนที่อยู่ลึกสุดจะเป็น Nested IF/ELSE Statement ซึ่งอยู่ภายใต้ IF condition แรก โดยทั่วไป Code ส่วนที่อยู่ลึกสุด ควรจะเน้นไปที่การทำงานอย่างเดียวซึ่งจะง่ายต่อการ Refactoring 

ทำ Methods ให้สั้นลง ด้วยการแบ่งเป็น Methods ขนาดเล็ก หรือการ Configuration files/DB table

ในกรณีนี้ เราสามารถแยกออกเป็น Private Method ได้ดังนี้

 

จุดลึกที่สุดถัดไป จะเรียก Post Data และโหลด Views ตอนนี้เราไปดูกันที่ Method add()  หลังจากการ Refactoring ส่วนอื่นๆ แล้ว จะพบว่า Code มัน Clean ขึ้น อ่านง่ายขึ้น และ Test ได้สะดวกขึ้น ดังที่เห็นจากตัวอย่างนี้

ใช้ { ใน IF-Statements เสมอ

ภาษา Programming ส่วนใหญ่จะ Support ในเรื่อง One Line IF-Statements และมี Developer บางคนที่ใช้มันเพราะมันใช้งานง่าย แต่มันก็ค่อนข้างอ่านยากและอาจสับสนกับ Condition ได้ ลองเปรียบเทียบจากตัวอย่างด้านล่างดู

อย่าใช้ Magic Numbers หรือ Magic Strings

ในตัวอย่างถัดไป คุณสังเกตเห็นว่า ถ้า Room มีมากกว่า 250 ห้อง จะแสดง Error Message ออกมา ในกรณีนี้ตัวเลข 250 ถือว่าเป็น Magic Number หากคุณไม่ใช่ Developer ที่เขียน Code นี้ ก็คงจะไม่เข้าใจว่ามันหมายถึงอะไร

เพื่อที่จะให้คนอื่นเข้าใจได้ว่า 250 คือ จำนวนห้องพักสูงสุด ดังนั้น จึงเปลี่ยนมากำหนดให้เป็น ตัวแปร $maxAvailableRooms ซึ่งตอนนี้ทำให้ Developer คนอื่นๆ เข้าใจได้ง่ายขึ้นว่ามันคืออะไร

อย่าใช้ ELSE-Statements โดยไม่จำเป็น

จากตัวอย่าง Function availablerooms() ใน IF Statement เราสามารถที่จะ ไม่ใช้ส่วนของ ELSE ได้ โดยที่ Logic ยังคงเหมือนเดิมอยู่

ควรตั้งชื่อที่สื่อความหมาย

จากตัวอย่างด้านล่าง คุณจะเห็นว่ามี 2 Methods คือ index() และ room_m() จาก Hotel Management System ที่เราไม่สามารถระบุได้ว่าวัตถุประสงค์ของมันมีไว้ทำอะไร ซึ่งมันง่ายที่จะเข้าใจได้มากกว่า ถ้าหากตั้งชื่อ Methods ให้มีความหมาย

ดึงความสามารถของภาษานั้นมาใช้ให้เต็มที่

Developer จำนวนมากที่ไม่ได้ใช้ความสามารถของภาษา Programming อย่างเต็มที่ อันที่จริงมี Features หลายๆ อย่าง ที่ช่วยให้คุณประหยัดเวลาและเพิ่มประสิทธิภาพให้ Code ลองเปรียบเทียบจาก 2 ตัวอย่างด้านล่าง ซึ่งผลออกมาเหมือนกัน แต่วิธีเขียน Code ต่างกันมาก เนื่องจากตัวอย่างที่เขียน Code น้อยกว่า มีการใช้ Type Hinting

เคล็ดลับเล็กๆ น้อยๆ เพื่อการ Coding ที่ดีขึ้น

  • ใช้ Form ของ Array ด้วยสัญลักษณ์ [ ] แทนการใช้ ( )
  • ใช้ Operator === แทน == หากต้องการเช็คทั้งค่าและ Data Type
  • ใช้ชื่อสั้นๆ สำหรับ Public Methods ส่วน Private Methods สามารถใช้ชื่อที่ยาวได้ เนื่องจากมี Scope การใช้งานที่จำกัด
  • ใช้ชื่อทั่วไปกับ Methods ที่ Implement Interfaces เช่น add() และใช้ชื่อที่สื่อความหมายกับ Single Classes Methods เช่น addUser() หรือ addDocument()
  • Remove Methods ที่ไม่ใช้ออกจาก Class
  • ใช้ Prefix “is / has” กับ Function ที่ Return Boolean เช่น isAdmin($user), hasPermission($user)
  • ใช้ Access Modifiers ใน Class Methods และ Properties อยู่เสมอ
  • ระวังเรื่อง Interface Pollution : ใช้เฉพาะ Methods ที่ Users ใช้ได้แบบ Public
  • จัดระเบียบ Class Methods ที่อยู่ภายใต้ Public Methods
  • แต่ละ Class ควรมีหน้าที่แค่ 1 อย่าง

ที่มา:  https://medium.com/

 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความที่เกี่ยวข้อง