Рубрики
Без рубрики

Как сделать вашу жизнь проще, используя функциональное программирование в Teadercript

Mateusz Sokola Как сделать вашу жизнь проще, используя функциональное программирование в типографии последние два года, сообщество JavaScript говорило о функциональном программировании. Функциональное программирование позволяет нам построить лучшее программное обеспечение без проектирования комплексных классов деревьев. Сегодня я объясню, как использовать функциональную композицию в

Автор оригинала: FreeCodeCamp Community Member.

Матеус Сокола

За последние два года сообщество JavaScript говорило о функциональном программировании. Функциональное программирование позволяет нам построить лучшее программное обеспечение без проектирования комплексных классов деревьев. Сегодня я объясню, как использовать функциональную композицию в Tymdercript и Лоташ Отказ

Код может быть Найдено на Github Отказ

Что такое функциональная композиция?

Функциональная композиция включает в себя объединение двух или более функций для создания более сложной. Сбит с толку? Никаких забот, в следующем примере это даст это понятно:

const f = function (a) { return a + 1 };const g = function (b) { return b * b };
const x = 2;const result = f(g(x)); // => 5

Я объединил две функции здесь – функция F и функция грамм. Функция f добавляет 1 к А Параметр и функция G умножает . B Параметр по B Отказ Результат 5.

Давайте реверс-инженер это:

  1. Постоянный х равно 2
  2. Постоянный х становится аргументом функции g
  3. Функция G Возвращает 4
  4. Функция G Выход (4) становится аргументом функции f
  5. Функция F Возвращает 5.

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

Реальный пример: форматирование денег

Я строил простую публикацию работы для разработчиков. Одним из требований было отображение вариантов зарплаты рядом с каждым предложением. Все зарплаты хранились в виде центов и должны быть похоже на это:

from: 6000000 to:   60,000.00 USD

Это выглядит легко, но работает с текстом трудно. Почти каждый разработчик ненавидит это.

Мы все проводим часы, написав регулярные выражения и имеющие дело с Unicode. Когда мне нужно отформатировать текст, я всегда пытаюсь погладить решение. После отсечения всех библиотек (слишком много для моих нужд) и все фрагменты кода, которые сосут, что осталось не так сильно.

Я решил, что мне нужно было построить его на своем собственном формате.

Как мы его построим?

Прежде чем мы начнем писать код, давайте копаемся в идею, которую я нашел:

  1. Сплит доллары и центы.
  2. Формат долларов – добавление тысяч сепараторов не так просто.
  3. Формат центов – дело с центами легко, почти не в коробке.
  4. Соедините вместе доллары и центы с сепаратором.

Теперь это выглядит ясно. Последнее, что нам нужно рассмотреть, это то, как добавить тысячи сепараторов в доллары. Давайте рассмотрим следующий алгоритм:

  1. Обратная строка.
  2. Разделить строку каждые 3 символа для массива.
  3. Присоединяйтесь к всем элементам массива вместе, добавив тысячу разделителя между ними.
  4. Обратная строка.

Все эти шаги могут быть переведены в следующий псевдо-код:

1. "60000"        => "00006"2. "00006"        => ["000", "06"]3. ["000", "06"]  => "000.06"4. "000.06"       => "60.000"

И именно этот алгоритм переводится в составленные функции:

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

return flow([  reverse,  splitCurry(match),  joinCurry(separator),  reverse]);

поток Функция – это функциональный композитор. Это трубопроводы результат Обратный Функция на вход Сплитcurry , и так далее. Это создает совершенно новую функцию. Помните тысячу алгоритма разделения сверху? Вот и все!

Вы можете увидеть, что я пособил разделить и присоединиться к функциям с «карри» и вызванным их. Эта техника называется carrying.

Что такое карри?

Carrying Это процесс перевода функции много аргументов в функцию единого аргумента. Функция единого аргумента возвращает другую функцию, если какие-либо аргументы все еще нужны.

Звучит жестко? Рассмотрим следующий пример:

Сплит Функция нуждается в двух аргументах – строку и шаблон разделения. Функция должна знать, как разделить текст. В этом случае мы не можем сочинять эту функцию, поскольку она нуждается в разных аргументах, чем другие. Вот где приходит карри.

import { curry } from "lodash";import split from "./split";
const splitCurry = curry(split);
splitCurry("000001")(/[0-9]{1,3}/g); // => ["000", "001"]

Теперь Сплитcurry Функция соответствует Обратный функция. Оба им нужны один аргумент. К сожалению, мы не призывали Сплитcurry Функция с шаблоном разделения еще. Это не будет работать таким образом.

Что делать, если мы поменяем заказ на аргумент в нашем карри?

import { curryRight } from "lodash";import split from "./split";
const splitCurry = curryRight(split);
splitCurry(/[0-9]{1,3}/g)("000001"); // => ["000", "001"]

Теперь наш код может работать так, как мы можем использовать каррики как заводские функции. Давайте посмотрим код еще раз:

return flow([  reverse,  splitCurry(match),  joinCurry(separator),  reverse]);

Все эти функции принимают один аргумент (строка), поэтому мы можем составить их вместе. А затем используйте их в качестве автономной функции. Подождите минуту…

Что такое фабричные функции?

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

const formatUS = thousandSeparator(',');const formatEU = thousandSeparator('.');
formatUS(10000); // 10,000formatEU(10000); // 10.000

Резюме

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

Я решил сохранить весь код на моем github Таким образом, статья легче читать.

Если у вас есть какие-либо проблемы или предложения, пожалуйста, напишите комментарий.

PS. Я начал Канал YouTube на программировании Отказ Пожалуйста, проверьте это и подпишитесь:)

Оригинал: “https://www.freecodecamp.org/news/how-to-make-your-life-easier-using-functional-programming-in-typescript-a2def76c468b/”