Javascript - это язык, который развивается каждую секунду дня, и каждое утро появляются новые версии фреймворка или библиотеки. Иногда это может быть ошеломляющим, если вы тот, кто всегда пытается догнать высокие темпы развития технологий. У JavaScript действительно есть основные или, скорее, фундаментальные концепции, от которых вам редко нужно переводить дыхание, чтобы успевать за ними. С учетом этих концепций фреймворки и библиотеки с быстрым темпом размещения не будут соответствовать вашим возможностям. Среди них - функциональное программирование.

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

FP относится к категории декларативного программирования, а не к императивной парадигме. Это означает, что FP фокусируется на ЧТО вы хотите достичь, не беспокоясь о КАК (процессы и алгоритмы, работающие для достижения этой конкретной цели).

Пример императивной парадигмы: получить сумму элементов в массиве.

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

Как видно выше, мы написали меньше строк кода с FP, и у нас не было большого количества деталей реализации, о которых нужно было беспокоиться. Мы использовали метод array.reduce(), который принимает аргумент аккумулятора, а другой - для хранения элементов массива. Аргумент аккумулятора сохраняет значение предыдущей итерации и в конечном итоге содержит окончательную сумму. Это экономит нам много умственных усилий по сравнению с нашим императивным подходом.

Функциональное программирование состоит из нескольких основных концепций. Это включает:

  • Чистые функции
  • Функции первого класса
  • Неизменяемость
  • Побочные эффекты

Чистые функции - это те функции, которые не зависят от данных, кроме передаваемых, и не изменяют данные, кроме возвращаемых. Чистые функции всегда будут возвращать одно и то же значение при одинаковых аргументах. Использование функций Pure упрощает тестирование приложения, поскольку все, что возвращается, является чистым, абсолютным и кратким.

Функции первого класса назначаются переменной и передаются в качестве аргументов другим функциям.

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

Итак, где в нашем коде мы должны использовать FP? Цикл for - верный индикатор того, что мы можем ввести некоторые FP, чтобы упростить наш код и упростить его чтение и размышления. Давайте углубимся в некоторые императивные и декларативные примеры, чтобы показать вам, как FP дает нам меньше думать при написании нашего кода.

Как видно выше, FP выигрывает с точки зрения сложности кода, умственных усилий и количества написанных строк кода. Стоит проверить и другие методы массивов, которые аккуратно реализуют FP. Я бы порекомендовал вам проверить: Array.prototype.map Array.prototype.every Array.prototype.some. Если вы заинтересованы в изучении этого с помощью библиотеки Js, Ramda.js и Lodash_fp будут идеальным местом для начала.

Это лишь верхушка айсберга с точки зрения того, что такое FP и что мы можем с этим сделать. Надеюсь, теперь вы думаете о том, чтобы избавиться от бесконечных вложенных циклов for 😃. До следующего раза, удачного кодирования.