Автор оригинала: FreeCodeCamp Community Member.
Функциональное программирование не является новым подходом к кодированию, но в последние годы оно выросло популярность.
Это связано с тем, что, как только программисты понимают основы для техники (и могут писать чистый и надежный код, используя его), приложения, написанные с использованием функционального подхода, намного проще работать с.
Из-за этого стоит получить понимание функционального программирования после того, как вы проработаете этот справочник новичков JavaScript.
Если вы часто работаете с JavaScript, использование этого подхода может сэкономить ваше время, и может облегчить работу вашего кода и потенциально более безопасным.
В этой статье мы посмотрим на основные принципы функционального программирования, а затем описывают несколько ключевых инструментов для использования этого подхода в JavaScript.
Императив против функционального программирования
Происхождение функционального программирования возвращается к 1930-х годам с изобретением лямбда исчисления.
Это был подход к вычислению, что стремился определить общие задачи И функционирует не как структурные манипулирования структурами данных (таких как массивы и списки), а скорее как математические функции, выполняемые на них.
Это может звучать вполне абстрактным, особенно если вы новичок для программирования. Но на самом деле разница между функциональным и императивным подходом может быть очень кратко выражена, используя пример. Посмотрите на них:
Императив:
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; function getOdds(arr) { let odds = []; for (let i = 0; i < arr.length + 1; i++) { if (i % 2 !== 0) { odds.push(i); } } return odds; } console.log(getOdds(arr)); // logs [1, 3, 5, 7, 9]
Функционал:
function getOdds2(arr){ return arr.filter(num => num % 2 !== 0) }console.log(getOdds2(arr)) // logs [ 1, 3, 5, 7, 9 ] const getOdds3 = arr => arr.filter(num => num % 2 !== 0)console.log(getOdds3(arr)) // logs [ 1, 3, 5, 7, 9 ]
Как видите, то, как работает эти программы, совершенно отличаются.
Императивный подход состоит в том, чтобы определить структуру данных, а затем манипулировать им, чтобы получить необходимую продукцию. В функциональном подходе мы используем функции фильтра для определения запрограммированной функции, а затем вызывают это по мере необходимости.
Конечно, большая часть сложности того, как работает функциональные программирование работы с конечного пользователя, а также от программиста, если они используют фрейм-разработки переднего конца.
Но преимущества использования функционального подхода ясны даже из этого примера – эта парадигма приводит к более короткому коду, который более легко читает, понял и проверен.
Зачем использовать функциональное программирование?
В дополнение к этому основным преимуществом существует ряд других преимуществ для использования функционального программирования.
Многие из этих стеблей от простого факта, что функциональный код легче читается, чем неисполненным кодом. Поскольку человек может легко увидеть, как работает функциональная программа, а не на необходимость раздвижения кода, чтобы понять его, упрощено многие аспекты тестирования.
Функциональное программирование обеспечивает целостность кода с тестированием проникновения
Тестирование проникновения становится более эффективным, где код является читаемым человеком. Это облегчает оценку целостности функционального кода.
Согласно разработке программного обеспечения Барбара Эриксон Облачная оборона , Тестирование проникновения всегда должно проводиться на приложениях JavaScript, и функциональный подход может помочь сделать это более строгим.
Эта простота чтения также упрощает многие другие управленческие процессы, которые применяются к разработке нового кода и приложений.
В функциональных подходах процессы соответствия гораздо проще, потому что программисты не должны беспокоиться о выполнении их кода. Это означает, что части программы, которая имеет дело с чувствительными данными, может быть изолирована и оценена отдельно от остальной части программы.
Функциональное программирование облегчает чтение кода
Однако преимущества функциональных подходов не только ограничены оценкой кода. Они также распространяются на процесс развития его.
Фактически, функциональные подходы опираются и усиливают преимущества и недостатки самого JavaScript.
Зарабатывая код прочтению, вы можете принести еще много сотрудников в процессе разработки, даже если у них нет широкого понимания JavaScript.
Это ключевой принцип подхода DEVOPS, один, который может помочь смягчить уязвимостей в вашем коде JavaScript. Это также тот, который облегчается, принимая функциональный подход к вашему кодированию.
Основные инструменты для функционального программирования
Существует ряд ключевых инструментов и концепций, о которых вы должны знать, когда речь идет о том, чтобы на самом деле вступить в действие функциональные подходы к действию. Давайте посмотрим на них.
1. Чистые и нечистые функции
На самом базовом уровне функциональный подход стремится манипулировать данными не мутируя их. Это означает, что «функциональная функция» будет принимать данные, выполнять некоторые расчеты и возвращать результат (и все без записи любую часть самой структуры данных).
Функции, которые работают таким образом, называются «чистыми» функциями, а те, которые не называются «нечистыми».
function getSquare(items) { var len = items.length; for (var i = 0; i < len; i++) { items[i] = items[i] * items[i]; } return items; }
Общая идея здесь состоит в том, чтобы оставить данные, которые вы работаете с полностью нетронутой.
Если вы хотите объединить два массива, вы не должны использовать Array.prototype.push ()
стратегия (которая перезаписывает исходные данные). Вместо этого используйте Array.prototype.Concat ()
Функция, которая создаст новый, «рабочий» массив для вас для работы.
2. Анонимные функции
Анонимные функции также важная часть Функционального программирования, и тот, который имеет свои корни в ущелье лямбда.
Анонимные функции, как предполагают их имя, не имеют явного определенного имени. Вместо этого они являются функциями, которые присваиваются переменные и вызывают через них.
alert((function(x) { return !(x > 1) ? 1 : arguments.callee(x - 1) * x; })(20));
Преимущество этого заключается в том, что до тех пор, пока вы сможете отслеживать, какие функции назначаются какие-то переменные, их можно считать очень легко и передаваться из одного модуля на другое без чего-то более чем переменного вызова. Это дает вам мощный, гибкий новый способ работы с функциями.
3. Рекурсивные функции
Использование рекурсивных функций является еще одним знаком функционального программирования. Хотя общая идея рекурсии будет знакома даже для начинающих программистов, функциональное программирование принимает идею еще больше, определяя функции, которые называют себя.
function countDown(fromNumber) { console.log(fromNumber); let nextNumber = fromNumber - 1; if (nextNumber > 0) { countDown(nextNumber); } } countDown(3);
Это делает реализацию рекурсии гораздо проще – в основном потому, что программисты не нужно использовать петли для этого.
Однако он также приходит с опасностями. В частности, наличие самого вызова функция делает его намного проще для того, чтобы бесконечные петли были случайно созданы, и поэтому будьте осторожны, чтобы поддерживать каждую рекурсивную функцию с строгим способом остановки выполнения.
Заключение
Хотя эти три концепции типичны для функционального программирования, по правде говоря, ассортимент способов, в которых парадигма может быть применена, означает, что это больше философии, чем набор хорошо разработанных инструментов и процессов.
Возьмите несколько шагов в захватывающий мир функционального программирования, и вы начнете видеть его влияние везде. На самом деле, он информирует многие из наиболее распространенных методов JavaScript сегодня.
Другими словами, хотя функциональное программирование кажется простым на поверхности, он имеет глубокие последствия на том, как вы код. Вот почему стоит учиться, даже если вы не используете его все время.