JavaScript:
การปรับโครงสร้างโค้ด
วิธีการ:
มาดูตัวอย่างง่ายๆ ที่การ Refactor สามารถทำให้โค้ดของคุณกระชับและอ่านง่ายขึ้น ที่นี่เราจะ Refactor ฟังก์ชันที่คำนวณผลรวมของอาร์เรย์ของตัวเลข
ก่อนการ Refactor:
function calculateSum(arr) {
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
console.log(calculateSum([1, 2, 3, 4])); // ผลลัพธ์: 10
หลังการ Refactor:
function calculateSum(arr) {
return arr.reduce((sum, num) => sum + num, 0);
}
console.log(calculateSum([1, 2, 3, 4])); // ผลลัพธ์: 10
เห็นไหมว่าวิธี reduce
ลดขนาดฟังก์ชันขณะที่ยังคงฟังก์ชันการทำงานไว้? นั่นคือการ Refactor สำหรับคุณ
ลงลึก:
การ Refactor ไม่ได้ปรากฏเป็นปฏิบัติการอย่างเป็นทางการจนกระทั่งการตีพิมพ์หนังสือของ Martin Fowler ที่มีชื่อว่า “การ Refactor: การปรับปรุงการออกแบบของโค้ดที่มีอยู่” ในปี 1999 หนังสือเล่มนี้ร่วมกับการเกิดขึ้นของการพัฒนาซอฟต์แวร์แบบ agile ช่วยผลักดันการ Refactor เข้าสู่กระแสหลัก
การอธิบายการ Refactor เป็นแง่มุมหนึ่งของการพัฒนาซอฟต์แวร์ก็เหมือนกับการอธิบายว่าทำไมคุณจึงจัดระเบียบห้องปฏิบัติการ คุณทำเพื่อในครั้งถัดไปที่คุณต้องแก้ไขบางอย่าง (ในกรณีนี้คือโค้ด) คุณจะใช้เวลาน้อยลงกับการจัดการกับความยุ่งเหยิงและมากขึ้นกับปัญหาจริง
เมื่อเราพูดถึงทางเลือกอื่นสำหรับการ Refactor เรามีการพูดคุยที่กว้างขึ้นเกี่ยวกับกลยุทธ์การบำรุงรักษาซอฟต์แวร์ ตัวอย่างเช่น คุณอาจเลือกการเขียนใหม่ทั้งหมด แต่นั่นมักจะมีค่าใช้จ่ายและความเสี่ยงสูงกว่า การ Refactor อย่างค่อยเป็นค่อยไป และคุณจะได้รับประโยชน์ต่อเนื่องโดยไม่ทำให้เรือจมจากการปรับปรุงใหญ่โดยไม่คาดคิด
การ Refactor ได้รับความช่วยเหลือจากการพัฒนาสภาพแวดล้อมการพัฒนาแบบรวม (IDEs) และเครื่องมือเช่น JSHint, ESLint และ Prettier ในระบบนิเวศของ JavaScript ซึ่งช่วยให้การตรวจสอบคุณภาพโค้ดและเน้นโอกาสในการ Refactor
มันทั้งหมดเกี่ยวกับโค้ดที่สะอาด เชิงพรรณนา และสามารถบำรุงรักษาได้ การปรับปรุงอัลกอริทึมที่ซับซ้อน ความเหมาะสมของโครงสร้างข้อมูล หรือแม้แต่การเปลี่ยนแปลงทางสถาปัตยกรรมเช่นการเปลี่ยนจากสไตล์การเขียนโปรแกรมแบบขั้นตอนไปเป็นแบบฟังก์ชันอาจเป็นส่วนหนึ่งของกระบวนการ Refactor
การ Refactor ต้องทำอย่างระมัดระวัง เป็นสิ่งสำคัญที่ต้องมีชุดการทดสอบที่แข็งแกร่งเพื่อให้แน่ใจว่าการเปลี่ยนแปลงของคุณไม่ได้แปลงพฤติกรรมของซอฟต์แวร์อย่างไม่คาดคิด - เหตุผลอีกประการหนึ่งที่ทำไมการพัฒนาการทดสอบที่ขับเคลื่อนด้วยการทดสอบ (TDD) จึงเชื่อมโยงกับการ Refactor เพราะมันให้ความปลอดภัยนั้นโดยค่าเริ่มต้น
ดูเพิ่มเติม
หนังสือ Refactoring ของ Martin Fowler: Refactoring - การปรับปรุงการออกแบบโค้ดที่มีอยู่
เฟรมเวิร์คการทดสอบ JavaScript (เพื่อให้แน่ใจว่าการ Refactor ไม่ทำให้ฟังก์ชันเสียหาย):
เครื่องมือสำหรับคุณภาพโค้ดและการสนับสนุนการ Refactor: