Elixir:
การปรับโครงสร้างโค้ด
วิธีการ:
ลองจัดระเบียบรูปแบบ Elixir ทั่วไป โดยเราจะ Refactor ฟังก์ชัน calculate_stats
ที่ทำงานมากเกินไปโดยการแบ่งมันออกเป็นชิ้นเล็ก ๆ ที่สามารถใช้ซ้ำได้
defmodule Stats do
# โค้ดเดิมที่ยังไม่ได้ Refactor
def calculate_stats(data) do
total = Enum.sum(data)
count = Enum.count(data)
mean = total / count
{mean, total}
end
# โค้ดที่ผ่านการ Refactor
def calculate_mean(data), do: Enum.sum(data) / Enum.count(data)
def calculate_total(data), do: Enum.sum(data)
def calculate_stats_refactored(data) do
mean = calculate_mean(data)
total = calculate_total(data)
{mean, total}
end
end
# ตัวอย่างผลลัพธ์
# ก่อน Refactoring
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}
# หลัง Refactoring
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}
ดังที่คุณเห็น ผลลัพธ์ยังคงเดิม แต่ตอนนี้เรามีฟังก์ชันเฉพาะกิจที่สามารถใช้ซ้ำและทดสอบได้โดยอิสระ
การดำดิ่งลึก
การ Refactor ไม่ใช่แนวคิดใหม่ มันเป็นส่วนสำคัญของการเขียนโปรแกรมตั้งแต่ยุคแรกของการพัฒนาซอฟต์แวร์ ผลงานที่น่าสนใจ เช่น “Refactoring: Improving the Design of Existing Code” โดย Martin Fowler ให้แนวปฏิบัติพื้นฐานสำหรับการ Refactor พร้อมข้อมูลเชิงลึกว่าเมื่อใดและวิธีการใช้งาน
ทางเลือกอื่นสำหรับการ Refactor ด้วยตนเอง รวมถึงเครื่องมือวิเคราะห์โค้ดอัตโนมัติ ซึ่งสามารถแนะนำหรือแม้กระทั่งดำเนินการ Refactor ได้ อย่างไรก็ตาม เครื่องมืออัตโนมัติอาจไม่เข้าใจบริบทเต็มรูปแบบของโค้ดได้ตลอดเวลาและอาจพลาดรายละเอียดที่ผู้ตรวจสอบมนุษย์จะค้นพบได้
รายละเอียดการดำเนินงานใน Elixir เฉพาะ รวมถึงการเข้าใจพาราดัมฟังก์ชันและการใช้การจับคู่รูปแบบ, บทบัญญัติป้องกัน, และตัวดำเนินการ pipe เพื่อเขียนโค้ดที่ชัดเจนและกระชับ ตัวอย่างเช่น การ Refactor มักจะเกี่ยวข้องกับการเปลี่ยนฟังก์ชันสไตล์ปฏิบัติการที่ซับซ้อนเป็นฟังก์ชันที่เล็กขึ้น องค์ประกอบได้ ซึ่งตามความชอบของ Elixir สำหรับความไม่เปลี่ยนแปลงและการดำเนินงานที่ไม่มีผลกระทบด้านข้าง
ดูเพิ่มเติม
สำหรับเทคนิคการ Refactor ที่เฉพาะเจาะจงสำหรับ Elixir:
- คู่มืออย่างเป็นทางการของ Elixir
- “Refactoring: Improving the Design of Existing Code” โดย Martin Fowler, สำหรับหลักการทั่วไปที่สามารถนำไปใช้กับ Elixir
- Credo, เครื่องมือวิเคราะห์โค้ดในรูปแบบเติมเต็มสำหรับ Elixir ที่ส encourages best practices.
- เส้นทาง Elixir ใน Exercism, สำหรับการฝึกปฏิบัติที่มักจะเกี่ยวข้องกับการ Refactor