Obecnie czytam Clean Code Roberta Martina . Myślę, że to świetnie, a kiedy piszę kod OO, biorę jego lekcje do serca. W szczególności myślę, że jego rada dotycząca używania małych funkcji o znaczących nazwach sprawia, że mój kod płynie znacznie płynniej. Najlepiej podsumowuje ten cytat:
[W] Chcemy móc czytać program tak, jakby to był zestaw akapitów TO, z których każdy opisuje aktualny poziom abstrakcji i odwołuje się do kolejnych akapitów TO na następnym poziomie w dół.
( Czysty kod , strona 37: „akapit TO” to akapit rozpoczynający się od zdania wyrażonego w bezokoliczniku. „Aby wykonać X, wykonujemy kroki Y i Z.„ „Aby wykonać Y, my ...” itd. ) Na przykład:
TO RenderPageWithSetupsAndTeardowns, sprawdzamy, czy strona jest stroną testową, a jeśli tak, uwzględniamy konfiguracje i rozłączenia. W obu przypadkach renderujemy stronę w formacie HTML
Piszę również kod funkcjonalny do mojej pracy. Przykłady Martina w książce na pewno czytają tak, jakby były zbiorem akapitów i są bardzo jasne - ale nie jestem pewien, czy „czyta się jak zbiór akapitów” jest pożądaną cechą, aby kod funkcjonalny miał .
Biorąc przykład ze standardowej biblioteki 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
To jest tak daleko, jak tylko możesz uzyskać od porady Martina, ale to zwięzłe, idiomatyczne Haskell. W przeciwieństwie do przykładów Javy w jego książce, nie wyobrażam sobie żadnego sposobu, aby to przeformułować na coś, co ma taki rytm, o jaki prosi. Podejrzewam, że Haskell napisany zgodnie ze standardem Czystego Kodu byłby tak rozwlekły i nienaturalny.
Czy mylę się, biorąc pod uwagę (przynajmniej niektóre) Czysty kod sprzeczny z najlepszymi praktykami programowania funkcjonalnego? Czy jest rozsądny sposób na reinterpretację tego, co mówi w innym paradygmacie?
xs
Jest to zła nazwa, ale jest tak powszechna w językach funkcjonalnych, jak w i
przypadku zmiennych pętli.