Я зараз читаю чистий код Роберта Мартіна . Я думаю, що це здорово, і при написанні коду OO я приймаю його уроки по душі. Зокрема, я вважаю, що його порада використовувати невеликі функції зі значущими іменами змушує мій код протікати більш плавно. Найкраще підсумувати цю цитату:
[W] хочемо мати можливість читати програму так, ніби вона є набором пунктів TO, кожен з яких описує поточний рівень абстрагування та посилається на наступні пункти TO на наступному рівні вниз.
( Чистий код , стор. 37: "Абзац" - це абзац, який починається з речення, озвученого в інфінітиві. "Щоб зробити X, ми виконуємо кроки Y і Z". "To Y, we ..." і т.д. ) Наприклад:
ДЛЯ 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 у його книзі, я не уявляю жодного способу перетворити це на щось, що має вигляд каденції. Я підозрюю, що Хаскелл, написаний до стандарту Чистого кодексу , вийшов би таким, як невдоволений і неприродний.
Чи помиляюся я вважаю (принаймні деякі з) чистого коду, що суперечить найкращим практикам функціонального програмування? Чи є розумний спосіб переосмислити те, що він говорить, в іншій парадигмі?
xs, це неправильне ім'я, але воно є настільки ж поширеним у функціональних мовах, як і iдля змінних циклу.