Pull to refresh

Comments 8

В этой статье мы сравним, как ООП и ФП будут обрабатывать абстракцию в конкретной простой задаче: вычислении суммы целых чисел от 1 до произвольного значения n.

Вот честно говоря, дальше читать расхотелось. Ну почему бы не привести пример ближе к реальности, тот же Model-View-Intent, например? Там как раз элементы ФП используются, если я верно этот паттерн понимаю.

Согласен с вами, что пример на более практичной задаче был бы интересен. Более того во время перевода меня переполняло желание некоторые куски кода переписать "на современный лад", но я старался придерживаться оригинала. Возможно позже постараюсь повторить идеи автора на более практичном примере, если вы видите в этом необходимость.

Любую проблему можно решить путём введения дополнительного уровня абстракции,
кроме проблемы слишком большого количества уровней абстракции
FizzBuzz
Я хочу приблизиться к истине настолько близко, насколько это возможно…
… я абстрагирую все до тех пор, пока не приду

Ну, так-то, абстракция, это максимальное удаление, так сказать: что бы в мутных разводах матового стекла всё выглядело одинаково подходящим. Всегда поражало, что при разработке снизу вверх, финальному аккорду приписывают фундаментальную изначальность, хотя, когда писались детали, никто не предполагал, что будет в итоге, а делалось, хотя бы то, что можно сформулировать на текущем этапе.

Абстракция — один из величайших инструментов воображения, когда-либо изобретенных людьми для представления, расшифровки и изображения мира

Величайший инструмент, что бы забить на назойливые детали и считать, что ты понимаешь и представляешь. ©
image

Отличная статья и перевод очень хороший. Спасибо. Переводите ещё!

Читаю и понимаю что где то я этот стиль уже видел. Смотрю Автора, и точно, это же Pierre-Yves Saumont. Он написал "The Joy of Kotlin" где тоже всё очень подробно "разжёвано". Благодаря этой книге у меня не раз наступали "озарения".

Если Вы знаете другие подобные книги, буду очень благодарен за ссылки.

Он написал еще замечательную книгу "Functional Programming in Java: How functional techniques improve your Java programs". Если вы пишите на Java, то очень рекомендую почитать. Мне эта книга очень понравилась.

Буду переводить еще ))

Абстракции неплохие, но до предела ещё далеко. В математике множество с ассоциативной бинарной операцией и нейтральным элементом называется моноид, и если уж абстрагироваться, то надо написать этот интерфейс. Реализовать его смогут и Int (разными способами для сложения и умножения, так что в Java придётся какие-то дополнительные обёртки вводить), и большая часть контейнеров из стандартной библиотеки, например List, HashMap, Set.

Более того, моноид должен быть унаследован от полугруппы, в которой есть только операция, но необязателен нейтральный элемент. Если кто-нибудь напишет класс для непустых списков (всегда имеющих хотя бы один элемент), то он будет реализовывать полугруппу, а моноид не сможет.

Для моноида и полугруппы можно будет написать свои функции свёртки, отличающиеся наличием стартового элемента: моноиду он не нужен, возьмём нейтральный. А чтобы было интереснее, на вход они будут принимать не список, а что-нибудь с интерфейсом Foldable. В конце концов, почему бы дерево не свернуть или хэш-таблицу: нам же только перебор элементов нужен, неважно как он внутри устроен.

А любители Haskell знают, откуда я всё это содрал :)

В математике множество с ассоциативной бинарной операцией и нейтральным элементом называется моноид, и если уж абстрагироваться, то надо написать этот интерфейс.

В самом первом примере, с паттерном "стратегия", интерфейс Computer - это оно и есть.

Sign up to leave a comment.

Articles