ฉันกำลังอ่านโรเบิร์ตมาร์ตินรหัสสะอาด ฉันคิดว่ามันยอดเยี่ยมและเมื่อเขียนรหัส OO ฉันกำลังเรียนอยู่ในใจ โดยเฉพาะอย่างยิ่งฉันคิดว่าคำแนะนำของเขาในการใช้ฟังก์ชั่นเล็ก ๆ ที่มีชื่อที่มีความหมายทำให้โค้ดของฉันลื่นไหลได้อย่างราบรื่นมากขึ้น สรุปได้ดีที่สุดโดยคำพูดนี้:
[W] e ต้องการให้สามารถอ่านโปรแกรมราวกับว่ามันเป็นชุดของย่อหน้า TO แต่ละอันจะอธิบายถึงระดับปัจจุบันของสิ่งที่เป็นนามธรรมและการอ้างอิงที่ตามมาถึงย่อหน้าในระดับถัดไป
( ทำความสะอาดรหัสหน้า 37: "TO วรรค" เป็นย่อหน้าที่เริ่มต้นด้วยประโยคที่เปล่งออกมาใน infinitive "ในการทำ X เราทำตามขั้นตอน Y และ Z" "เพื่อทำ Y เรา ... " ฯลฯ ) ตัวอย่างเช่น:
หากต้องการ RenderPageWithSetupsAndTeardowns เราจะตรวจสอบว่าหน้าดังกล่าวเป็นหน้าทดสอบหรือไม่และหากเป็นเช่นนั้นเราได้รวมการตั้งค่าและการฉีกขาดไว้ด้วย ไม่ว่าในกรณีใดเราแสดงผลหน้าเว็บเป็น HTML
ฉันยังเขียนรหัสการทำงานสำหรับงานของฉัน ตัวอย่างของมาร์ตินในหนังสืออ่านได้อย่างชัดเจนราวกับว่าเป็นชุดของย่อหน้าและชัดเจนมาก - แต่ฉันไม่แน่ใจว่า "การอ่านเหมือนชุดของย่อหน้า" เป็นคุณสมบัติที่พึงประสงค์สำหรับรหัสการทำงานที่มี .
นำตัวอย่างออกจากไลบรารีมาตรฐาน Haskell :
maximumBy :: (a -> a -> Ordering) -> [a] -> a
maximumBy _ [] = error "List.maximumBy: empty list"
maximumBy cmp xs = foldl1 maxBy xs
where
maxBy x y = case cmp x y of
GT -> x
_ -> y
นั่นเป็นเรื่องที่ไกลที่สุดเท่าที่คุณจะได้รับจากคำแนะนำของมาร์ติน แต่มันก็สั้นกระชับ Haskell แตกต่างจากตัวอย่าง Java ในหนังสือของเขาฉันไม่สามารถจินตนาการถึงวิธีการ refactor ที่ในสิ่งที่มีจังหวะที่เขาถาม ฉันสงสัยว่า Haskell เขียนถึงมาตรฐานของClean Codeจะหลุดออกมาอย่างยืดเยื้อและไม่เป็นธรรมชาติ
ฉันผิดหรือไม่ที่จะต้องพิจารณา (อย่างน้อยบางส่วน) ทำความสะอาดโค้ดที่ขัดแย้งกับแนวทางปฏิบัติที่ดีที่สุดในการตั้งโปรแกรมการทำงาน มีวิธีที่เหมาะสมที่จะตีความสิ่งที่เขาพูดในกระบวนทัศน์ที่แตกต่างออกไปหรือไม่?
xs
เป็นชื่อที่ไม่ดี แต่เป็นเรื่องทั่วไปในภาษาที่ใช้งานได้เช่นเดียวi
กับตัวแปรลูป