[code smells]Extract Method แยกฟังก์ชันให้เป็นอิสระ

Smalldog124
1 min readJul 22, 2019

--

ปัญหา

ในหนึ่งฟังก์ชันมีการทำงานหลายอย่างในตัว และไม่รู้ว่าฟังก์ชันมันทำงานอะไรกันแน่

[Golang]
func PrintOwing() {
PrintBanner()

// Print details.
fmt.Println("name: ", name)
fmt.Println("amount: ", GetOutstanding())
}

วิธีการ Extract Method

  1. สร้างฟังก์ชันใหม่และตั้งชื่อให้ชัดเจนว่ามันทำอะไร
  2. copy code ที่จะแยกมาจากฟังก์ชันหลักมาใส่ในฟังก์ชันที่สร้างมาใหม่ ลบ code ที่อยู่ฟังก์ชันเดิมออก แล้วเปลี่ยนเป็นการเรียกใช้ฟังก์ชันที่สร้างขึ้นมาใหม่แทน

    หาตัวแปรที่ใช้ในส่วนที่ย้ายในฟังก์ชันหลัก จากนั้นก็ย้ายไปยังฟังก์ชันใหม่แทนเพื่อให้การทำงานของโปรแกรมยังเหมือนเดิม
  3. ถ้ามีตัวแปรที่ใช้ทั้งในฟังก์ชันหลักและฟังก์ชันที่แยกออกไป ก็ให้ pass paramiters เข้าไปยังฟังก์ชันที่แยกออก
  4. ถ้ามีตัวแปรในฟังก์ชันที่แยกออกไปมีการเปลี่ยนแปลงค่า ให้ return ค่ากลับไปยังฟังก์ชันหลักด้วย เพื่อในการทำงานของฟังก์ชันยังเหมือนเดิม
[Golang]
func PrintOwing() {
PrintBanner()
printDetail(GetOutstanding())
}
func printDetail(standing int){
fmt.Println("name: ", name)
fmt.Println("amount: ", standing)
}

สิ่งที่ได้จากการ refactor

  1. Code อ่านง่ายขึ้น และฟังก์ชันใหม่ที่แยกออกไปชื่อจะอธิบายการทำงานชันเจนขึ้น เช่น createOrder(), renderCustomerInfo()
  2. ลดการซำ้ของ Code ในโปรแกรมเพราะถ้ามีส่วนไหนที่ทำงานเหมือนกันก็เพียงแค่เรียกใช้ ฟังก์ชันที่สร้างขึ้นมาใหม่เลย
  3. Code จะไม่มี dependent กันและยังหาจุดผิดได้ง่ายอีกด้วย

Source: https://sourcemaking.com/refactoring/extract-method

--

--

No responses yet