Haskell:
การปรับโครงสร้างโค้ด

วิธีการ:

สมมติว่าคุณมีชิ้นส่วนของโค้ด Haskell ที่ซ้ำซากจำเจเหมือนเพลงโปรดของคุณ นี่คือการดูอย่างรวดเร็วว่าคุณอาจจะปรับโครงสร้างนั้นได้อย่างไรโดยใช้ฟังก์ชั่น

ก่อนการปรับโครงสร้าง:

printInvoice :: String -> Float -> String -> IO ()
printInvoice customer total item = do
  putStrLn $ "Customer: " ++ customer
  putStrLn $ "Total: " ++ show total
  putStrLn $ "Item: " ++ item

หลังจากการปรับโครงสร้างเล็กน้อย:

printDetail :: String -> String -> IO ()
printDetail label value = putStrLn $ label ++ ": " ++ value

printInvoice :: String -> Float -> String -> IO ()
printInvoice customer total item = do
  printDetail "Customer" customer
  printDetail "Total" (show total)
  printDetail "Item" item

-- ตัวอย่างผลลัพธ์:
-- Customer: Alice
-- Total: $42.00
-- Item: Haskell Programming Guide

อย่างที่คุณเห็นได้ โดยการสร้างฟังก์ชั่น printDetail แยกออกมา เราสามารถหลีกเลี่ยงการซ้ำซากและทำให้ printInvoice ชัดเจนและง่ายต่อการจัดการมากขึ้น

การศึกษาลึก

เมื่อ Haskell เปิดตัวในช่วงปลายยุค 80’s ก็ชัดเจนว่าพาราไดม์ฟังก์ชันนัลสามารถนำเสนอมุมมองใหม่ให้กับการปฏิบัติการเขียนโค้ด ดำเนินเวลามาถึงปัจจุบัน และการปรับโครงสร้างใน Haskell นั้นโดยเฉพาะมีความงดงาม ขอบคุณที่ฟังก์ชันเป็นพลเมืองชั้นหนึ่งและมีระบบประเภทที่แข็งแกร่ง คุณสามารถปรับโครงสร้างโดยไม่ต้องกลัวว่าคุณจะทำให้แอปของคุณเสียหาย เนื่องจากคอมไพเลอร์ช่วยสนับสนุนคุณอยู่

ทางเลือกอื่นสำหรับการปรับโครงสร้างด้วยตนเองอาจรวมถึงการใช้เครื่องมืออัตโนมัติ แม้ว่าธรรมชาติของฟังก์ชันและความปลอดภัยของประเภทใน Haskell อาจทำให้สิ่งนี้ไม่นิยมเท่ากับภาษาอื่นๆ ในการทำงาน มันสำคัญที่จะต้องใช้ประโยชน์จากคุณสมบัติของ Haskell เช่น ฟังก์ชั่นของออร์เดอร์ที่สูงขึ้น เพียวริตี้ และความไม่เปลี่ยนแปลงเพื่อทำให้การปรับโครงสร้างเป็นไปอย่างราบรื่น

การปรับโครงสร้างเช่น “การแยกฟังก์ชั่น” ที่เพิ่งแสดงไปนั้นเป็นเรื่องปกติ แต่คุณยังสามารถทำ “การรวมฟังก์ชั่น” “การเปลี่ยนชื่อตัวแปร” และ “การเปลี่ยนลายเซ็นของฟังก์ชั่น” ได้อย่างมั่นใจ ขอบคุณที่ระบบประเภท การอนุมานประเภทที่แข็งแกร่งของ Haskell บางครั้งสามารถจับความผิดพลาดที่อาจหลุดลอดผ่านในภาษาอื่น

ดูเพิ่มเติม

สำหรับการศึกษาลึกเกี่ยวกับการปรับโครงสร้างใน Haskell อ่านหนังสือ “Refactoring: Improving the Design of Existing Code” โดย Martin Fowler ที่แนะนำแนวคิดที่มีความเกี่ยวข้องกันทั่วไป ลองใช้เครื่องมือ hlint สำหรับคำแนะนำอัตโนมัติในการปรับปรุงโค้ด Haskell ของคุณ นอกจากนี้ แวะไปที่วิกิ Haskell (https://wiki.haskell.org/Refactoring) เพื่อข้อมูลเชิงลึกจากชุมชนและการอ่านเพิ่มเติม