Pull to refresh

Практика функционального программирования на JavaScript с использованием Ramda

Reading time 3 min
Views 21K
JavaScript *Functional Programming *
Translation
Мы в rangle.io давно увлекаемся функциональным программированием, и уже опробовали Underscore и Lodash. Но недавно мы наткнулись на библиотеку Ramda, которая на первый взгляд похожа на Underscore, но отличается в небольшой, но важной области. Ramda предлагает примерно тот же набор методов, что и Underscore, но так организовывает работу с ними, что функциональная композиция становится легче.

Разница между Ramda и Underscore – в двух ключевых местах – каррирование и композиция.
Читать дальше →
Total votes 32: ↑31 and ↓1 +30
Comments 34

Мышление в стиле Ramda: Первые шаги

Reading time 6 min
Views 22K
JavaScript *Functional Programming *
Tutorial
Translation
Недавно я познакомился с замечательной серией статей "Thinking in Ramda", которые проясняют на простых и ясных примерах способы написания кода в функциональном стиле с использованием библиотеки Ramda. Эти статьи показались мне настолько прекрасными, что я не смог удержаться от того, чтобы не перевести их на русский язык. Надеюсь, что в этом будет польза для многих людей :) Давайте начнём перевод с первой вступительной статьи.

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

Данный пост — это начало серии статей «Мышление в стиле Ramda» о функциональном программировании.

Я буду использовать библиотеку Ramda в этих статьях, хотя многие из обсуждаемых идей применимы также к множеству других библиотек, таких как Underscore и Lodash, а также к другим языкам программирования.

Я буду придерживаться лёгкой, менее академической стороны функционального программирования. Это в основном потому что я хочу, чтобы серия была доступна большему числу людей, но также частично и потому что я сам не так близок к истинно функциональной дороге.
Читать дальше →
Total votes 19: ↑16 and ↓3 +13
Comments 6

Мышление в стиле Ramda: Сочетаем функции

Reading time 5 min
Views 12K
JavaScript *Functional Programming *
Tutorial
Translation
Данный пост — это вторая часть серии статей о функциональном программировании под названием "Мышление в стиле Ramda".

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

В первой части я представил Ramda и некоторые основополагающие идеи от функционального программирования, такие как функции, чистые функции и иммутабельность. Далее я предположил, что хорошим местом для начала являются итерационные функции, такие как forEach, map, select и их друзья.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Comments 9

Мышление в стиле Ramda: Частичное применение (каррирование)

Reading time 8 min
Views 10K
JavaScript *Functional Programming *
Tutorial
Translation
Данный пост — это третья часть серии статей о функциональном программировании под названием «Мышление в стиле Ramda».

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

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

В том посте мы рассмотрели простые конвееры функций, которые принимают лишь один аргумент. Но что если мы хотим использовать такие функции, которые принимают больше одного аргумента?
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Comments 0

Почему Ramda?

Reading time 8 min
Views 28K
JavaScript *
Sandbox

Пост содержит перевод статьи «Why Ramda?», которую подготовил один из контрибьютеров Скот Сайет. Статья была опубликована 10 Июня 2014 года на сайте и рассказывает о том почему стоит обратить своё внимание на библиотеку Ramda и функциональное программирование в целом.


Примечание переводчика

В связи с тем, что статья была написана в 2014 году, некоторые примеры устарели и не работали с последней версией библиотеки. Поэтому они были адаптированы под последнюю версию Ramda@0.25.0.

Почему Ramda?


Когда-то давно buzzdecafe представил миру Ramda, в тот же момент сообщество поделилось на два лагеря.

Читать дальше →
Total votes 36: ↑34 and ↓2 +32
Comments 9

Мышление в стиле Ramda: Декларативное программирование

Reading time 8 min
Views 12K
JavaScript *Functional Programming *
Tutorial
Translation
1. Первые шаги
2. Сочетаем функции
3. Частичное применение (каррирование)
4. Декларативное программирование
5. Бесточечная нотация
6. Неизменяемость и объекты
7. Неизменяемость и массивы
8. Линзы
9. Заключение

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

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

Когда мы начинаем писать маленькие функциональные строительные блоки и объединять их, мы обнаруживаем, что нам необходимо написать множество функций, которые будут оборачивать операторы JavaScript, такие как арифметика, сравнение, логика и управление потоком. Это может показаться утомительным, но мы находимся за спиной Ramda.
Читать дальше →
Total votes 10: ↑8 and ↓2 +6
Comments 37

Мышление в стиле Ramda: Бесточечная нотация

Reading time 6 min
Views 7.2K
JavaScript *Functional Programming *
Tutorial
Translation

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


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


В четвёртой части мы говорили о написании кода в декларативном стиле (объясняем компьютеру что нужно сделать) вместо императивного (говорим ему, как это сделать).


Вы могли заметить, что некоторые из функций, которые мы написали (forever21, drivingAge и water, к примеру) все принимают параметр, создают новую функцию и применяют эту функцию к параметру.


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

Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Comments 6

Мышление в стиле Ramda: Неизменяемость и объекты

Reading time 8 min
Views 7.1K
JavaScript *Functional Programming *
Tutorial
Translation

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


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


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


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

Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Comments 4

Мышление в стиле Ramda: Неизменяемость и массивы

Reading time 4 min
Views 3.7K
JavaScript *Functional Programming *
Tutorial
Translation

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


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


В шестой части мы говорили о работе с объектами JavaScript в функциональном и иммутабельном стиле.


В данном посте мы поговорим о подобной работе с массивами.

Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 0

Мышление в стиле Ramda: Линзы

Reading time 3 min
Views 6.9K
JavaScript *Functional Programming *
Tutorial
Translation

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


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


В шестой и седьмой частях мы изучили, как читать, обновлять и трансформировать свойства объектов и элементы массивов в декларативном и иммутабельном стиле.


Ramda также предоставляет более общий инструмент для выполнения данных операций, который называется линзами.

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Comments 3

Мышление в стиле Ramda: Заключение

Reading time 3 min
Views 3K
JavaScript *Functional Programming *
Tutorial
Translation

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


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


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


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


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

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

Читать дальше →
Total votes 11: ↑11 and ↓0 +11
Comments 0