RamdaJS, библиотека, упрощающая функциональное программирование на JavaScript, получила собственную игровую площадку. Мы осмотрелись и дали рекомендации.
Но почему именно RamdaJS?
Разве я не могу делать FP в ванильном Javascript?
Конечно, можно, но разница в том, что RamdaJS — это библиотека, специально разработанная для функционального стиля программирования:
RamdaJS подчеркивает более чистый функциональный стиль. Неизменяемость и функции без побочных эффектов лежат в основе его философии проектирования. Это поможет вам выполнить работу с помощью простого и элегантного кода.
Рамда-функции автоматически становятся каррированными. Это позволяет вам легко создавать новые функции из старых, просто не указывая конечные параметры.
Параметры функций Ramda располагаются таким образом, чтобы их было удобно перемещать. Данные, с которыми нужно работать, обычно предоставляются последними.
Проблема в том, что Ramda имеет около 200 функций, поэтому может быть трудно понять, какие из них и когда использовать. По этой причине существует шпаргалка, в которой «перечислены наиболее распространенные действия, которые вы можете захотеть выполнить, и функции, которые, скорее всего, подойдут для этой задачи».
Она действует как указатель. Например, когда мне нужно «изменить каждое значение», я нахожу запись, которая указывает на соответствующую функцию — в данном случае это «map».
Очень полезно, но есть возможности для улучшения. И это обеспечивает интерактивная игровая площадка «Изучайте Ramda интерактивным способом», которая выводит помощь на другой уровень. Вместо поиска в статичном списке, это пользовательский интерфейс, с помощью которого вы можете найти подходящий метод интерактивно!
Он начинается с простого выпадающего списка сценариев «у меня есть», который сопоставляется с выпадающим списком действий «хотел бы». Ваш выбор формирует предложение типа «У меня есть список, и я хотел бы изменить каждое значение», действие, которое открывает соответствующую документацию Rambda и примеры кода.
Для приведенного выше примера и функции map:
R.map
http://ramdajs.com/docs#map
Functor f => (a -> b) -> f a -> f b
- Принимает функцию и вектор, применяет функцию к каждому из значений вектора и возвращает вектор той же формы.
Ramda предоставляет подходящие реализации map для Array и Object, поэтому эта функция может быть применена к [1, 2, 3] или {x: 1, y: 2, z: 3}.
- Отправляет в метод map второго аргумента, если он присутствует.
- Действует как преобразователь, если преобразователь указан в позиции списка.
- Также рассматривает функции как функторы и компонует их вместе.
const double = x => x * 2;
R.map(double, [1, 2, 3]); //=> [2, 4, 6]
R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}
Другим случаем может быть «У меня есть список, и я хотел бы выбрать значения с самого начала», и так далее.
Выпадающее поле сценариев также содержит объекты, функции, логику, отношения и математику, поэтому можно прочитать: «У меня есть функция, и я хотел бы частично применить функцию».
Приятным побочным эффектом игровой площадки является то, что наряду с изучением того, как Ramda работает с функциональным программированием, вы также открываете суть самих функциональных концепций, изучая сценарии и действия, которые могут быть выполнены. Например, я наблюдаю за возможными действиями, которые я могу выполнить в рамках этой парадигмы:
- я могу комбинировать функции, возвращающие обещания
- применять список функций к каждому аргументу и собирать результаты
- частично применить функцию
- завернуть функцию
- узнать, удовлетворяет ли значение списка двум предикатам
- выбирать значения списка на основе пользовательской логики
- узнать, удовлетворяет ли значение определенного ключа объекта пользовательскому предикату
Если вы хотите действительно узнать о Ramda, я бы рекомендовал начать с отличного (и бесплатного) онлайн-курса Functional Programming Patterns With RamdaJS от Educative и использовать эту интерактивную шпаргалку в процессе занятий.