บทนำและหลักการ
คอร์สนี้คืออะไร
หัวข้อที่มีชื่อว่า “คอร์สนี้คืออะไร”code แทบไม่เคยมาถึงมือเราในสภาพสะอาดเรียบร้อย ส่วนใหญ่โตขึ้นมาใต้เส้นตาย โดนแปะแก้โดยคนที่ย้ายงานไปแล้ว และสะสมทางลัดจนไม่มีใครกล้าแตะ Refactoring คือวินัยที่ดึงรูปทรงของ code แบบนั้นกลับมาให้อ่านออกและแก้ไหว — โดยไม่ เปลี่ยนสิ่งที่ผู้ใช้ได้รับ
โมดูลแรกนี้ว่าด้วยแนวคิดที่อยู่เบื้องหลังการลงมือ ส่วนที่เหลือของคอร์สเป็นแคตตาล็อกท่าเฉพาะ แต่ท่าที่ไม่มีหลักการรองรับก็เป็นแค่การแก้แบบเสี่ยงดวง จบบทเรียนทั้งห้านี้แล้วคุณจะบอกได้แม่น ๆ ว่า refactoring คืออะไร อธิบายได้ว่าคุ้มกับเวลาที่เสียไปตรงไหน และทำตามจังหวะที่คุ้มกันคุณไว้ระหว่างลงมือ
กฎหนึ่งเดียวที่นิยามวินัยนี้
หัวข้อที่มีชื่อว่า “กฎหนึ่งเดียวที่นิยามวินัยนี้”Refactoring ปรับปรุงโครงสร้าง ภายใน ของ code โดยไม่เปลี่ยน behavior ภายนอก
ทุกอย่างในคอร์สนี้แขวนอยู่กับประโยคเดียวนั้น ถ้าคุณเปลี่ยนสิ่งที่โปรแกรมทำ — แก้บั๊ก เพิ่มฟีเจอร์ เปลี่ยน output — นั่นก็เป็นงานที่มีคุณค่า แต่ไม่ใช่ refactoring การแยกสองกิจกรรมนี้ออกจากกันนี่แหละที่ทำให้ทั้งคู่ปลอดภัย
จังหวะที่คุณจะได้เรียนรู้
หัวข้อที่มีชื่อว่า “จังหวะที่คุณจะได้เรียนรู้”Refactoring ไม่ใช่การเขียนใหม่ยกแผงแบบฮีโร่ แต่เป็น loop แน่น ๆ ของก้าวเล็กจิ๋วที่ย้อนกลับได้ และทุกก้าวต้องผ่านการยืนยันก่อนจะไปก้าวถัดไป คุณดมกลิ่น smell เจอ เปลี่ยนเล็ก ๆ หนึ่งครั้งโดยรักษา behavior ไว้ รัน test แล้ว commit ถ้า test แดงก็ undo แล้วลองก้าวที่เล็กลงกว่าเดิม จากนั้นวนใหม่
flowchart LR A["Spot a smell"] --> B["Make one<br/>small change"] B --> C["Run the tests"] C -->|green| D["Commit"] C -->|red| E["Undo,<br/>try smaller"] E --> B D --> A
loop นี้คือจังหวะหัวใจของทุกเรื่องที่ตามมา การ refactoring ก้อนใหญ่ที่ดูน่ากลัว จริง ๆ ก็แค่ก้าวเล็ก ๆ ที่ปลอดภัยหลายร้อยก้าวต่อกันเป็นสาย
แผนที่ของโมดูล
หัวข้อที่มีชื่อว่า “แผนที่ของโมดูล”| บทเรียน | สิ่งที่คุณจะได้ติดตัวไป |
|---|---|
| refactoring คืออะไร? | นิยามที่แม่นยำซึ่งรักษา behavior ไว้ และกฎ “สองหมวก” |
| ทำไมและเมื่อไหร่ | ผลตอบแทน technical debt กฎลูกเสือ และเมื่อไหร่ที่ ไม่ ควร refactor |
| ก้าวเล็ก ๆ และ test | loop แบบละเอียด และเหตุผลที่ตาข่ายจาก test ทำให้ loop นี้ได้ผล |
| การอ่าน code smell | ตัวกระตุ้นที่บอกคุณว่า จะ refactor อะไร และควรหยิบท่าไหนมาใช้ |
เรียนจบโมดูลนี้แล้วก็พร้อมลุยแคตตาล็อกภาคปฏิบัติ เริ่มที่ Composing Methods
Code Smell → โมดูล
หัวข้อที่มีชื่อว่า “Code Smell → โมดูล”| ประเภท Code Smell | ตัวอย่างที่พบบ่อย | โมดูลที่จัดการ |
|---|---|---|
| Function ยาวและซับซ้อน | Long Method, Duplicated Code, Magic Number | Composing Methods |
| Feature อยู่ผิดที่ | Feature Envy, Large Class, Data Clumps | Moving Features |
| ข้อมูลไม่มีขอบเขต | Primitive Obsession, Mutable Data, Global Data | Organizing Data |
| API เรียกใช้ยาก | Long Parameter List, Flag Argument, Misleading Name | Simplifying APIs |
| เงื่อนไขอ่านยาก | Complex Conditional, Nested If, Null Check | Simplifying Conditionals |
| Hierarchy ไม่ตรงความจริง | Refused Bequest, Speculative Generality | Generalization & Inheritance |