В настоящее время я читаю Чистый код Роберта Мартина . Я думаю, что это здорово, и когда я пишу ОО-код, я принимаю его уроки близко к сердцу. В частности, я думаю, что его совет использовать маленькие функции со значимыми именами делает мой код более плавным. Лучше всего подытожить этой цитатой:
[Мы] хотим иметь возможность читать программу, как если бы это был набор абзацев TO, каждый из которых описывает текущий уровень абстракции и ссылается на последующие абзацы TO на следующем уровне ниже.
( Чистый код , стр. 37: «TO абзац» - это абзац, который начинается с предложения, озвученного в инфинитиве. «Для выполнения X мы выполняем шаги Y и Z». «Для выполнения Y мы ...» и т. Д. ) Например:
TO RenderPageWithSetupsAndTeardowns, мы проверяем, является ли страница тестовой страницей, и если да, то мы включаем настройки и разборки. В любом случае мы отображаем страницу в HTML
Я также пишу функциональный код для моей работы. Примеры Мартина в книге определенно читаются так, как если бы они были набором параграфов, и они очень ясны - но я не уверен, что «чтение как набор абзацев» является желательным качеством для функционального кода, чтобы иметь ,
Взяв пример из стандартной библиотеки 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
Это как можно дальше от совета Мартина, но это лаконично, идиоматичный Хаскелл. В отличие от примеров Java в его книге, я не могу себе представить способ рефакторинга этого в нечто такое, о чем он просит. Я подозреваю, что Haskell, написанный в стандарте Чистого кода, окажется скучным и неестественным.
Я ошибаюсь, что (хотя бы некоторые из них) Чистый код расходится с лучшими практиками функционального программирования? Есть ли разумный способ переосмыслить то, что он говорит, в другой парадигме?
xs
, это плохое имя, но оно так же распространено в функциональных языках, как и i
для переменных цикла.