Главная » Хабрахабр » [Перевод] Мышление в стиле Ramda: Заключение

[Перевод] Мышление в стиле Ramda: Заключение

Первые шаги
2. 1. Частичное применение (каррирование)
4. Сочетаем функции
3. Бесточечная нотация
6. Декларативное программирование
5. Неизменяемость и массивы
8. Неизменяемость и объекты
7. Заключение
10. Линзы
9. Функциональные компоненты с React stateless функциями и Ramda
12. Использование Ramda с Redux
11. Модульные редюсеры и селекторы

Данный пост завершает серию статей о функциональном программировании под названием "Мышление в стиле Ramda".

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

В течении этой серии статей, мы узнали, что Ramda имеет несколько основных принципов, которыми движется её API:

  • Данные идут последними: почти все из функций принимает параметр с данными последним аргументом
  • Каррирование: почти каждая функция в Ramda "каррирована". То есть, вы можете вызвать функцию только с частью неоходимых аргументов, и получить новую функцию, которая будет ожидать оставшиеся аргументы. Как только все аргументы будут предоставлены — оригинальная функция будет вызвана.

Эти два принципи позволяют нам писать очень чистый функциональный код, который объединяет базовые строительные блоки в более мощные операции.

Резюме

Для справки, вот короткое резюме серии статей.

  • Первые шаги представляет нам идею функций, чистых функций и иммутабельности. Далее она вводит нас в функции итерации по коллекциям, такие как map, filter и reduce.
  • Объединение функций показывает нам, как мы можем объединять наши функции различными способами, используя такие инструменты как both, either, pipe и compose.
  • Частичное применение (каррирование) помогает нам понять, когда и как может быть полезно предоставить некоторые аргументы функции и получить возможность предоставить остальные позже. Мы используем partial и curry для того чтобы помочь нам с этим и узнаём о flip и заполнителе (__)
  • Декларативное программирование учит нас разнице между императивным и декларативным программированием. Мы узнаём, как использовать декларативные заменители Ramda для арифметики, сравнений, логики и условий.
  • Бесточечная нотация представляет нам идею бесточечного стиля, также известную как "молчаливое программирование". В бесточчечном стиле, мы не видим аргументы с данными, с которыми мы работаем, это делается неявно. Наши программы составляются из маленьких простых блоков, которые объединяются вместе для того чтобы делать то, что нам нужно. Только в самом конце мы применяем наши составные функции к актуальным данным.
  • Неизменяемость и объекты возвращает нам к идее о работе в декларативном стиле, это время для получения нам инструментов, нужных для чтения, обновления, изменения, удаления и трансформации свойств объектов.
  • Неизменяемость и массивы продолжает тему и показывает нам, как делать подобные операции с массивами.
  • Линзы завершают серию вместе с представлением концепции линз, конструкции, которая позволяет нам сфокусироваться на маленьких частях больших структур данных. Используя функции view, set и over, мы можем читать, обновлять и трансформировать значение, на котором сфокусирована линза в контекте больших структур данных.

Что дальше?

В частности, мы не поговорили о функциях для работы со строками, и мы не говорили о более сложных концепциях, таких как трансдюсеры. Мы не покрыли каждую часть Ramda в данной серии статей.

Там целое богатство информации. Для того чтобы узнать больше о том, что Ramda может делать, я рекомендую изучать её документацию. К примеру, некоторые из функций для работы с массивами также работат со строками, и map работает как с массивами, так и с объектами. Все функции сгруппированы по типу данных, с которыми они работают, хотя там имеется некоторое перекрытие.

Если вы заинтересовались более сложными функциональными темами, вот несколько мест, к которым вы можете обратиться:

  • Трансдюсеры: здесь можно почитать хорошую вступительную статью о том, как парсить логи с помощью трансдюсеров.
  • Алгебраические типы данных: если вы достаточно читали о функциональном программировании, вы слышали о алгебраических типах и таких терминах как "Функтор", "Аппликатор" и "Монад". Если вам интересно изучить эти идеи в контексте Ramda, обратите внимание на проект ramda-fantasy, который реализует некоторые типы данных, которые соответствуют спецификации Fantasy Land (или Алгебраическая Спецификация JavaScript)

От автора переводов статей: если будет угодно Господу, я продолжу переводить статьи о Ramda, в частности, у меня есть желание перевести статью об использовании ramda с redux, статью о функциональных компонентах с React stateless функциями и Ramda, статью о модульных редюсерах и селекторах, и наверное статью о глобализации redux-селекторов.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Разминка для тех, кто умеет в Python

Мы обожаем квизы, посвященные языкам программирования. Привет! Сегодняшний квиз посвящен исключительно Python. В нашем блоге мы разместили уже целых три: первый — по Python, PHP, Golang, DevOps, второй — полностью по Go, третий — только по PHP. (Кстати, кто едет? ...

Финтех-дайджест: финансовым регуляторам нужен ИИ для того, чтобы работать в современных условиях

Сегодня в выпуске: Привет, Хабр! В США считают, что финансовым регуляторам необходимо использовать ИИ; Банки РФ обязали уведомлять ЦБ перед тем, как рассказывать прессе о произошедших хакерских атаках; Биткоин двинулся вперед, есть оптимистичные прогнозы; Несмотря на запрет биткоинов, в Китае ...