Я люблю JavaScript, потому что это один из его языка, который не прилагает вас в стиле программирования. Вы можете бесплатно использовать JavaScript в объектно-ориентированном стиле или функциональном стиле. Персональный, я большой поклонник последнего. Написав функциональный код, я увидел огромные улучшения в срок озабоченности, повторного использования и читаемости моего кода. Вы пишете только функции, которые принимают параметры и производят выходные данные: нет побочных эффектов! Итак, когда вы хотите написать функциональный JavaScript, сначала нужно сделать выбор между библиотекой, которая может помочь вам сделать это. Я расскажу о трех из них, и я покажу вам, почему Ramda может быть лучшим выбором.
Underscore.js.
Underscore.js самый старший. Это было впервые выпущено на 2009 году. Чтобы быть честным с вами, это также с этой библиотекой, которую я обнаружил функциональный стиль программирования в JavaScript. Он обеспечивает огромный набор функций, которые позволяют манипулировать структурами данных, такими как коллекции, массивы и объекты. Так что это просто в использовании, и давайте пройдем простой пример:
const arr = [1, 2, 3]; const arr 2 = _.map(arr, (e) => e + 1);
Лоташ
Лоташ Родился через три года после подчеркивания, в 2012 году. Довольно интересно узнать, что это запрос на тягу от Джона-Давида Далтона на подчеркивании, который позволяет создавать Лодаш. Джон-Давид Далтон настаивал на производительности и последовательность между браузерами для продвижения своей библиотеки! Лодаш фактически обеспечивает тот же набор функций, но не волнуйтесь, они не нужны, имеют одинаковое имя или могут быть некоторые различия между ними. Например, функция сглаживания мелкая с Лодаш, но она глубоко с подчеркиванием. Например.
//Lodash _.flatten([[1, 2, [3]]]); //[1, 2, [3]] //Underscore _.flatten([[1, 2, [3]]]); //[1, 2, 3]
Вы заметили, что в обоих случаях с Lodash и подчеркиванием я использовал _. <Функция>
Отказ Не забывайте, что Лоташ родился от подчеркивания, поэтому синтаксис Лоташа действительно близок к подчеркиванию One! Лоташ также предоставляет некоторые объекты с цепочками, пользовательские сборки, которые не подчеркивает нет! Другое, что следует отметить, заключается в том, что релизы Лодаша чаще, чем подчеркивает.
Равна
Рамда безусловно, самый молодой. Это было впервые выпущено в конце 2013 года. Причина, по которой я люблю Рамда так много, потому что это гораздо функциональный. Почему? Из-за карри! В функциональном языке программирования Carrying позволяет создавать функцию из другой функции, не предоставив все аргументы. Итак, давайте возьмем пример (с Ramda):
const addOneToNumbers = R.map(x => x + 1);
В этом примере AddOnetonumbers
это функция, созданная из функции r.map. Вы заметили, что я не предоставил все аргументы функции карты. Я опущел, чтобы предоставить коллекцию, на которой обратный вызов будет взаимодействовать. Итак, теперь я могу использовать AddOnetonumbers
С разными коллекциями:
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; addOneToNumbers(arr1); // [2, 3, 4] addOneToNumbers(arr2); // [5, 6, 7]
Функции Ramda автоматически связываются. Таким образом, вы можете сделать то, что я сделал со всеми функциями Ramda. Разве это не круто?
Из моего опыта он действительно полезен, когда вам нужно манипулировать структурой, такими как обещания или наблюдаемые. Давайте возьмем пример. Предположим, мы хотим получить все аватары пользователей GitHub. С Ramda мы можем написать что-то вроде:
$.getJSON('https://api.github.com/users?since=135') .then(R.pluck('avatar_url')) .then((d) => console.log(d));
С Lodash мы бы написали что-то вроде:
$.getJSON('https://api.github.com/users?since=135') .then((users) => _.map(users, (user) => user.avatar_url)) .then((d) => console.log(d));
Обратите внимание, насколько это с кражей с Рамдой. Мне не нужно было создавать функцию лямбда, чтобы просто карта по всем пользователям. Это было довольно простым с карионом!
Вы можете найти рабочий пример здесь
Рамда также уважает принцип мюмобельности. Это невер мутирует переменной. Так, например, когда вы используете R.merge (O1, O2)
Функция, у вас есть удостоверение, что O1 и O2 Paramers не были мутированы. Это не так с Лодаш или подчеркиванием. Таким образом, вы должны быть очень осторожны с Lodash или подчеркиванием, когда вы используете функцию. С Ramda это безопасно!
Lodash FP.
Лоташ недавно предоставил Лоташ/FP , модуль для продвижения более функционального стиля программирования. Этот модуль позволяет использовать карриную версию функций Lodash. Эти функции также безопасны в течение срока мультипликации. Так что вы можете использовать слияние
, Mergeall
И другие функции безопасно, не заботясь о мультиплизме! Так что если вы привязаны к Лотасту, я думаю, что это хорошая альтернатива Ramda
Заключение
Я надеюсь, что я убедил вас, чтобы попробовать Рамда. У меня часто боли навязывают Рамда в моих командах. Люди часто слишком привязаны к Лоташе, и они используют его, только потому, что кажется крутым, никогда не заботясь о том, как и почему. Итак, если вы на самом деле не пишите функциональный код, и просто хочу написать с императивным стилем, предпочитайте использование нативных функций ES6, таких как карта, уменьшение или фильтр. Это является репозиторий здесь Это требует сравнения между функциями Лодаш и коренным.