Интерактивный курс на платформе Educative, изучающий основные принципы FP в Javascript с помощью небольшой библиотеки RambdaJS.
Он адресован программистам, уже знакомым с Javascript на среднем и продвинутом уровне. Позвольте мне начать с того, что это затрудняет понимание друг друга.
Это также интерактивно, так как вам не придется выходить из окна браузера, чтобы запустить примеры кода. Весь код встроен в веб-страницы курса и работает на месте, поэтому нет необходимости открывать отдельную вкладку или окно браузера, чтобы загрузить площадку для кода. Однако, если вы предпочитаете это делать, есть также специальная площадка для RambdaJS, доступная по адресу https://ramdajs.com/repl/.
Так почему же RamdaJS? Разве я не могу выполнять FP на ванильном Javascript? Конечно, можете, но разница в том, что RambdaJS — это библиотека, специально разработанная для функционального стиля программирования:
RambdaJS подчеркивает более чистый функциональный стиль. Неизменяемость и функции без побочных эффектов лежат в основе философии дизайна. Это может помочь вам выполнить работу с помощью простого и элегантного кода.
Функции Ramda каррированы автоматически. Это позволяет легко создавать новые функции из старых, просто не указывая окончательные параметры.
Параметры функций Ramda упорядочены так, чтобы было удобно каррирование. Данные, с которыми нужно работать, обычно предоставляются в последнюю очередь.
Эти средства упрощают построение функций в виде последовательностей более простых функций, каждая из которых преобразует данные и передает их следующей, стиль программирования, который Rambda называет «бесточечным».
Поскольку Rambda считается служебной библиотекой, такой как Lodash и Underscore, решается еще один вопрос: что она предлагает больше, чем эти две популярные библиотеки Javascript. В основном это сводится к:
Хотя он имеет много общих утилит с Lodash / Underscore (сопоставление, фильтрация, уменьшение, слияние), Ramda никогда не пыталась быть еще одним набором инструментов. Вместо этого Ramda сделала FP настолько безболезненным, насколько это было возможно для разработчиков JavaScript, что в то время еще никому не удавалось.
Установив его полезность, давайте посмотрим, как это будет проходить курс. Он начинается с введения в FP для новичков, объясняющего, что такое чистые функции, неизменяемость и побочные эффекты, и почему они делают код более чистым и безопасным. Я нашел «Упражнения по очищению», где от вас требуется преобразовать ряд функций в чистые, очень интуитивно понятные, поскольку вам нужно хорошо подумать и действительно понять, о чем идет речь, прежде чем даже прикасаться к клавиатуре. Этот подход «сначала концепт, затем код» используется на протяжении всей остальной части курса.
Мы по-прежнему используем ванильный Javascript после того, как дойдем до раздела функций высокого порядка до конца функциональной композиции, где Rambda медленно добавляется в микс. В тот момент, когда мы используем Curry, мы получаем представление о том, что Rambda делает это лучше, чем ванильный .
Учитывая следующую функцию:
const upperAndReverseFirstNames = (users) => {return users.map (upperAndReverseFirstName);};
const result = upperAndReverseFirstNames ([{firstName: ‘Bobo’}, {firstName: ‘Anon’}, {firstName: ‘Marko’}]);
заменяем ваниль:
const upperAndReverseFirstNames = (users) => {return users.map (upperAndReverseFirstName);};
с помощью Rambda, как в:
const upperAndReverseFirstNames = карта (upperAndReverseFirstName);
что приводит к сокращению количества строк на две и даже более декларативно, чем Array.map.
Вывод, сортировка и условная логика приводят нас к обзору модулей и к упражнениям, где мы применяем то, что узнали до сих пор, при выполнении следующих действий:
Напишите безбалльную функцию для расчета общей стоимости корзины покупок в долларах.
Напишите безбалльную функцию для возврата самого дешевого товара в тележке.
Напишите функцию без баллов, чтобы получить 3 блюда с наивысшим рейтингом <= заданная цена. Напишите безбалльную функцию, чтобы найти среднюю ежемесячную зарплату выше 100000 долларов. Напишите бесплатную функцию, которая проверяет кредитные рейтинги. Затем мы переходим к функторам. Освежает то, что, хотя я прочитал много статей, которые чрезмерно усложняют понятие функтора, эта руководствуется простотой и обсуждает суть концепции всего в одном-двух предложениях: Думайте о Functor как о контейнере, который содержит любое значение. Это может быть строка, дата, логическое значение, массив, объект и т. Д. Этот контейнер должен иметь метод карты, чтобы считаться функтором. Вот простой пример const Identity = (x) => ({значение: x, map: (fn) => Identity (fn (x))});
Эта функция Identity принимает значение и возвращает функтор.
const name = Identity (‘Бобо’); console.log (имя);
Функторы действуют как строительные блоки для линз, конструкции, которая позволяет «увеличивать» конкретную часть структуры данных, которая рассматривается далее.
Курс заканчивается сложным и увлекательным упражнением по созданию пользовательского интерфейса для API общедоступного поиска в Википедии. Сначала вам нужно клонировать его репозиторий GitHub, который содержит скелет приложения, а затем изменить его, внеся необходимые поправки.
В заключение, это было коротко, сфокусированно, прямо по делу. безжирный курс по концепциям FP, применяемым через Javascript с помощью библиотеки RambdaJS. Легкое знание теории и использование небольших фрагментов кода, которые можно запускать на месте, чтобы донести суть, упрощает работу. Существует также полностью продуманный проект, который направлен на то, чтобы превратить ученика от выполнения фрагментов и кратковременных упражнений в конкретный пример из реального мира, чтобы в мгновение ока подготовить вас к FP-битве. О, я упоминал, что это тоже бесплатно ? Настоятельно рекомендуется.