Я мощно расширил первый гайд по ФП -- добавил 27 новых понятий/паттернов, которые превратили тему не только в функциональное программирование, но и в функциональное проектирование.
Жутко доволен, потому что получил инсайт:
если в ООП вам в принципе не обойтись без глубокого погружения в тему объектно-ориентированного анализа и проектирования и изучения толстенных книг, иначе ваш проект будет стабильно запутываться уже на первых двадцати классах, а трудоёмкость внесения новых фич взлетит экспоненциально,
то в ФП достаточно просто следовать паре десятков паттернов, чтобы автоматически выйти на уровень правильного проектирования, сохраняя сложность проекта линейной.
Make Illegal States Unrepresentative.
Типы как ограничители.
Вместо комментария "значение должно быть > 0" → тип PositiveInteger.
Вместо if (user != null) → тип NonOptionalUser.
Ликвидация runtime-ошибок.
Нет NullPointerException, ValueOutOfRange — компилятор их блокирует.
Моделирование домена в типах + типы -- это документация.
Компилятор-союзник проверяет бизнес-правила статически.
Код следует за моделью, а не наоборот. Архитектура определяется не фреймворками, а инвариантами домена.
Тесты концентрируются на логике, а не на проверке "а что если null?".
Рефакторинг безопасен: изменения типов "ломают" код точечно и на уровне компиляции.
Доменные эксперты визуально понимают код с выразительными типами:
Бизнес-логика переходит из умов постановщиков и разработчиков → в систему типов как отображение домена 1:1 → в работающий код.
=
Собственно по этой причине и книг-то по функциональному проектированию единицы -- по большому счёту они и не нужны, в отличие от объектного, и тем более императивного программирования. То есть по сути мы повышаем мастерство, не прокачивая скиллы (но если конечно их ещё и прокачать в функциональщине и кампутер сайнсе, выигрыш вообще будет на порядки).
А глупенькие так и продолжат учить понятие классов, работу с памятью, и прочую убогую скриптовую по сути чухню для школоты, застывшую на уровне 1975-го года.
Post #1918
951

- ❤ 51
- 😁 10
- 👍 7
- ❤🔥 1
- 😎 1