Comments 8
В этой статье мы сравним, как ООП и ФП будут обрабатывать абстракцию в конкретной простой задаче: вычислении суммы целых чисел от 1 до произвольного значения n.
Вот честно говоря, дальше читать расхотелось. Ну почему бы не привести пример ближе к реальности, тот же Model-View-Intent, например? Там как раз элементы ФП используются, если я верно этот паттерн понимаю.
Согласен с вами, что пример на более практичной задаче был бы интересен. Более того во время перевода меня переполняло желание некоторые куски кода переписать "на современный лад", но я старался придерживаться оригинала. Возможно позже постараюсь повторить идеи автора на более практичном примере, если вы видите в этом необходимость.
Я хочу приблизиться к истине настолько близко, насколько это возможно…
… я абстрагирую все до тех пор, пока не приду
Ну, так-то, абстракция, это максимальное удаление, так сказать: что бы в мутных разводах матового стекла всё выглядело одинаково подходящим. Всегда поражало, что при разработке снизу вверх, финальному аккорду приписывают фундаментальную изначальность, хотя, когда писались детали, никто не предполагал, что будет в итоге, а делалось, хотя бы то, что можно сформулировать на текущем этапе.
Абстракция — один из величайших инструментов воображения, когда-либо изобретенных людьми для представления, расшифровки и изображения мира
Величайший инструмент, что бы забить на назойливые детали и считать, что ты понимаешь и представляешь. ©
![image](https://habrastorage.org/getpro/habr/comment_images/8a7/06d/3af/8a706d3aff9fd3a5f8b0d2c6bd880e1c.png)
Отличная статья и перевод очень хороший. Спасибо. Переводите ещё!
Читаю и понимаю что где то я этот стиль уже видел. Смотрю Автора, и точно, это же Pierre-Yves Saumont. Он написал "The Joy of Kotlin" где тоже всё очень подробно "разжёвано". Благодаря этой книге у меня не раз наступали "озарения".
Если Вы знаете другие подобные книги, буду очень благодарен за ссылки.
Абстракции неплохие, но до предела ещё далеко. В математике множество с ассоциативной бинарной операцией и нейтральным элементом называется моноид, и если уж абстрагироваться, то надо написать этот интерфейс. Реализовать его смогут и Int (разными способами для сложения и умножения, так что в Java придётся какие-то дополнительные обёртки вводить), и большая часть контейнеров из стандартной библиотеки, например List, HashMap, Set.
Более того, моноид должен быть унаследован от полугруппы, в которой есть только операция, но необязателен нейтральный элемент. Если кто-нибудь напишет класс для непустых списков (всегда имеющих хотя бы один элемент), то он будет реализовывать полугруппу, а моноид не сможет.
Для моноида и полугруппы можно будет написать свои функции свёртки, отличающиеся наличием стартового элемента: моноиду он не нужен, возьмём нейтральный. А чтобы было интереснее, на вход они будут принимать не список, а что-нибудь с интерфейсом Foldable. В конце концов, почему бы дерево не свернуть или хэш-таблицу: нам же только перебор элементов нужен, неважно как он внутри устроен.
А любители Haskell знают, откуда я всё это содрал :)
Уроки абстракции: чему FP может научить ООП