Atualmente, estou lendo o Código Limpo de Robert Martin . Eu acho ótimo e, ao escrever o código OO, levo suas lições a sério. Em particular, acho que o conselho dele de usar pequenas funções com nomes significativos faz meu código fluir muito mais suavemente. É melhor resumido por esta citação:
[Nós] queremos poder ler o programa como se fosse um conjunto de parágrafos TO, cada um dos quais descrevendo o nível atual de abstração e referenciando parágrafos TO subsequentes no próximo nível abaixo.
( Código Limpo , página 37: um "parágrafo TO" é um parágrafo que começa com uma frase expressa no infinitivo. "Para executar X, executamos as etapas Y e Z." "Para executar Y, nós ..." etc. ) Por exemplo:
PARA RenderPageWithSetupsAndTeardowns, verificamos se a página é uma página de teste e, se for o caso, incluímos as configurações e os teardowns. Nos dois casos, renderizamos a página em HTML
Também escrevo código funcional para o meu trabalho. Os exemplos de Martin no livro definitivamente são lidos como se fossem um conjunto de parágrafos e são muito claros - mas não tenho tanta certeza de que "leia como um conjunto de parágrafos" seja uma qualidade desejável para o código funcional. .
Tomando um exemplo da biblioteca padrão 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
Isso é o mais longe que você pode obter dos conselhos de Martin, mas é conciso e idiomático Haskell. Ao contrário dos exemplos de Java em seu livro, não consigo imaginar como refatorá-lo para algo que tenha o tipo de cadência que ele pede. Suspeito que Haskell, escrito de acordo com o padrão do Código Limpo , sairia por muito tempo e antinatural.
Estou errado ao considerar (pelo menos alguns) o Código Limpo em desacordo com as práticas recomendadas de programação funcional? Existe uma maneira sensata de reinterpretar o que ele diz em um paradigma diferente?
xs
é um nome ruim, mas é tão comum em linguagens funcionais quanto i
em variáveis de loop.