Tôi hiện đang đọc Bộ luật sạch của Robert Martin . Tôi nghĩ nó thật tuyệt, và khi viết mã OO tôi đang học thuộc lòng anh ấy. Đặc biệt, tôi nghĩ lời khuyên của anh ấy về việc sử dụng các hàm nhỏ với các tên có ý nghĩa làm cho mã của tôi trôi chảy hơn nhiều. Nó được tóm tắt tốt nhất bởi trích dẫn này:
[W] e muốn có thể đọc chương trình như thể nó là một tập hợp các đoạn TO, mỗi đoạn mô tả mức độ trừu tượng hiện tại và tham chiếu các đoạn TO tiếp theo ở cấp độ tiếp theo.
( Clean Code , trang 37: a "TO đoạn" là đoạn bắt đầu bằng một câu được nói ở dạng nguyên bản. "Để thực hiện X, chúng tôi thực hiện các bước Y và Z." "Để làm Y, chúng tôi ...", v.v. ) Ví dụ:
ĐẾN RenderPageWithSetupsAndTeardowns, chúng tôi kiểm tra xem trang đó có phải là trang thử nghiệm hay không và nếu có, chúng tôi bao gồm các thiết lập và phân tích. Trong cả hai trường hợp, chúng tôi kết xuất trang bằng HTML
Tôi cũng viết mã chức năng cho công việc của tôi. Các ví dụ của Martin trong cuốn sách chắc chắn đọc như thể chúng là một tập hợp các đoạn văn và chúng rất rõ ràng - nhưng tôi không chắc chắn rằng "đọc như một đoạn văn" là một chất lượng mong muốn cho mã chức năng có .
Lấy một ví dụ ra khỏi thư viện tiêu chuẩn 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
Đó là khoảng cách xa như bạn có thể nhận được từ lời khuyên của Martin, nhưng đó là Haskell ngắn gọn, thành ngữ. Không giống như các ví dụ Java trong cuốn sách của anh ấy, tôi không thể tưởng tượng ra bất kỳ cách nào để cấu trúc lại thứ đó thành một thứ có nhịp mà anh ấy yêu cầu. Tôi nghi ngờ rằng Haskell được viết theo tiêu chuẩn của Clean Code sẽ trở nên dài dòng và không tự nhiên.
Tôi có sai khi xem xét (ít nhất là một số) Mã sạch theo tỷ lệ cược với các thực tiễn tốt nhất về lập trình chức năng không? Có cách nào hợp lý để diễn giải lại những gì anh ta nói trong một mô hình khác không?
xs
là một loại tên xấu nhưng nó phổ biến trong các ngôn ngữ chức năng như i
đối với các biến vòng lặp.