Ich lese gerade Robert Martins Clean Code . Ich finde es großartig, und wenn ich OO-Code schreibe, nehme ich mir seine Lektionen zu Herzen. Insbesondere denke ich, dass sein Rat, kleine Funktionen mit aussagekräftigen Namen zu verwenden, meinen Code viel flüssiger macht. Es ist am besten mit diesem Zitat zusammengefasst:
[W] Wir möchten das Programm so lesen können, als ob es eine Menge von TO-Absätzen wäre, von denen jeder die aktuelle Abstraktionsebene beschreibt und auf nachfolgende TO-Absätze auf der nächsthöheren Ebene verweist.
( Bereinigter Code , Seite 37: Ein "TO-Absatz" beginnt mit einem Satz im Infinitiv. "Um X zu tun, führen wir die Schritte Y und Z aus." "Um Y zu tun, führen wir ..." usw. ) Zum Beispiel:
Um PageWithSetupsAndTeardowns zu rendern, überprüfen wir, ob es sich bei der Seite um eine Testseite handelt, und schließen in diesem Fall die Setups und Teardowns ein. In beiden Fällen rendern wir die Seite in HTML
Ich schreibe auch Funktionscode für meinen Job. Martins Beispiele in dem Buch lesen sich definitiv so, als wären sie eine Reihe von Absätzen, und sie sind sehr klar - aber ich bin mir nicht so sicher, ob "wie eine Reihe von Absätzen liest" eine wünschenswerte Eigenschaft für funktionalen Code ist .
Ein Beispiel aus der Haskell-Standardbibliothek entnehmen :
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
Das ist ungefähr so weit weg, wie Sie Martins Rat möglicherweise entziehen können, aber das ist prägnante, idiomatische Haskell. Im Gegensatz zu den Java-Beispielen in seinem Buch kann ich mir keine Möglichkeit vorstellen, dies in etwas umzugestalten, das die Art von Trittfrequenz hat, nach der er fragt. Ich vermute, dass Haskell, der nach dem Standard von Clean Code geschrieben wurde , sich als langwierig und unnatürlich herausstellen würde.
Bin ich falsch, wenn ich Clean Code (zumindest teilweise) in Widerspruch zu den Best Practices der funktionalen Programmierung halte ? Gibt es eine sinnvolle Möglichkeit, das, was er in einem anderen Paradigma sagt, neu zu interpretieren?
xs
ist ein schlechter Name, aber er ist in funktionalen Sprachen genauso verbreitet wie i
bei Schleifenvariablen.