Attualmente sto leggendo il codice pulito di Robert Martin . Penso che sia fantastico, e quando scrivo il codice OO sto prendendo a cuore le sue lezioni. In particolare, penso che il suo consiglio di usare piccole funzioni con nomi significativi renda il mio codice molto più fluido. È meglio riassunto da questa citazione:
[Vogliamo essere in grado di leggere il programma come se fosse un insieme di paragrafi TO, ognuno dei quali descrive l'attuale livello di astrazione e fa riferimento ai successivi paragrafi TO al livello successivo in basso.
( Codice pulito , pagina 37: un "paragrafo TO" è un paragrafo che inizia con una frase espressa nell'infinito. "Per fare X, eseguiamo i passaggi Y e Z." "Per fare Y, noi ..." ecc. ) Per esempio:
PER RenderPageWithSetupsAndTeardowns, controlliamo se la pagina è una pagina di test e, in tal caso, includiamo le impostazioni e gli smontaggi. In entrambi i casi eseguiamo il rendering della pagina in HTML
Scrivo anche codice funzionale per il mio lavoro. Gli esempi di Martin nel libro sicuramente leggono come se fossero una serie di paragrafi, e sono molto chiari - ma non sono così sicuro che "legge come una serie di paragrafi" sia una qualità desiderabile per il codice funzionale .
Prendendo un esempio dalla libreria standard 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
Questo è il più lontano possibile dal consiglio di Martin, ma è conciso, idiomatico Haskell. A differenza degli esempi di Java nel suo libro, non riesco a immaginare alcun modo per ricondurlo a qualcosa che ha il tipo di cadenza che chiede. Ho il sospetto che Haskell scritto secondo lo standard di Clean Code sarebbe risultato prolisso e innaturale.
Sbaglio considerare (almeno parte di) Clean Code in contrasto con le migliori pratiche di programmazione funzionale? C'è un modo ragionevole per reinterpretare ciò che dice in un diverso paradigma?
xs
è un brutto nome, ma è comune nei linguaggi funzionali come i
per le variabili di ciclo.