Автор оригинала: Cristian Salcescu.
Откройте для себя функциональный JavaScript был назван одним из Лучшие новые функциональные программирования книги BookAuthority Действительно
Чистые функции легче читать и понимать. Все зависимости функции находятся в своем определении и поэтому легче увидеть. Чистые функции также имеют тенденцию быть маленькими и делают одну вещь. Они не используют это постоянный источник путаницы.
Цепочка
Давайте посмотрим и сравним Две стили: императивные и функциональные. В функциональном стиле я использую базовый панель инструментов для операций списка Фильтр () а также карта () Отказ Тогда я цепи их вместе.
Я взял случай сбора задач. Задача имеет ID описание ( desc ) логический Завершено , а Тип и назначенный Пользователь объект. Объект пользователя имеет Имя имущество.
//Imperative style let filteredTasks = []; for(let i=0; i
Обратите внимание на обратные вызовы для Фильтр () и карта () как Чистые функции с намерением выявления имени.
Вот a Производительность теста Измерение разницы между двумя стилями. Похоже, что функциональный подход на 60% медленнее. Когда императивный процесс завершится в 10 миллисекунд, функциональный подход завершится в 16 миллисекунд. В этом случае Использование императивной петли будет преждевременной оптимизацией.
Монтажный стиль
В предыдущем примере я использовал стиль без точка при составлении функций. Без точки – это техника, которая улучшает читаемость, устраняя ненужные аргументы. Рассмотрим следующий код:
tasks.filter(task => isPriorityTask(task)).map(task => toTaskView(task));
В монтном стиле написано без аргументов:
tasks.filter(isPriorityTask).map(toTaskView);
Для большего количества по точечному взгляду на Насколько точечная композиция сделает вас лучшим функциональным программистом
Частичное применение
Далее я хочу посмотреть, как мы можем улучшить читаемость, а также повторно использовать существующую функцию. Прежде чем делать это, нам нужна новая функция на нашем панели инструментов.
Для частичного приложения мы можем использовать частичный () Функция из популярной библиотеки, как underscore.js или lodash.js Отказ Bind () Метод также может делать частичное приложение.
Допустим, мы хотим реформировать следующий императивный код К функционалу, проще прочитать, стиль:
let filteredTasks = []; for(let i=0; i
Как я уже сказал, на этот раз мы хотим создать общую функцию, которая может быть использована для фильтрации любым типом задач. ISTASKOFTYPE () это общая функция. частичный () Функция используется для создания новой функции предиката ISCreateNewcontent () Это фильтрует по определенному типу.
function isTaskOfType(type, task){
return task.type === type;
}
let isCreateNewContent = partial(isTaskOfType, "NC");
let filteredTasks = tasks.filter(isCreateNewContent);Обратите внимание на функцию предикатов. У него есть имя, выражающее свое намерение. Когда я читаю tasks.filter (iscreatenewcontent) Я ясно понимаю, что за задания Я выбираю.
Уменьшать
Я начну новый пример используя список покупок. Вот как список может выглядеть:
let shoppingList = [
{ name : "orange", units : 2, price : 10, type : "FRT"},
{ name : "lemon", units : 1, price : 15, type : "FRT"},
{ name : "fish", units : 0.5, price : 30, type : "MET"}
];Я вычислю общую цену и цену только для фруктов. Ниже приведен императивный стиль:
let totalPrice = 0, fruitsPrice = 0; for(let i=0; i
Принимая функциональный подход в этом случае потребует использования Уменьшить () вычислять общую цену.
Как и раньше, мы создаем новые функции для требуемых обратных вызовов и дайте им намерение раскрывать имена: AddPrice () и Frefruits () Отказ
function addPrice(totalPrice, line){
return totalPrice + (line.units * line.price);
}
function areFruits(line){
return line.type === "FRT";
}
let totalPrice = shoppingList.reduce(addPrice,0);
let fruitsPrice = shoppingList.filter(areFruits).reduce(addPrice,0);Заключение
Чистые функции легче читать и рассуждать о.
Функциональное программирование будет сломать списка операций в шагах, как: фильтр, карта, уменьшить, сортировать. В то же время необходимо будет определить новые чистые небольшие функции для поддержки этих операций.
Объединение функционального программирования с практикой предоставления намерений выявления имени значительно улучшает читаемость кода.
Откройте для себя функциональный JavaScript был назван одним из Лучшие новые функциональные программирования книги BookAuthority Действительно
Для получения дополнительной информации о применении методов функциональных программиров в реакции посмотрите на Функциональный реагировать Отказ
Учить Функциональный реагировать в проекте, основанном на проекте, с Функциональная архитектура с реагированием и redux Отказ
Следуйте в Twitter
Оригинал: “https://www.freecodecamp.org/news/make-your-code-easier-to-read-with-functional-programming-94fb8cc69f9d/”