Упростите программирование с помощью функционального программирования
Функции высшего порядка, пожалуй, одна из лучших вещей, которые когда-либо происходили в языке JavaScript. Они широко используются не зря.
Если вы не знаете, что такое функция высшего порядка, это просто функции, которые принимают другие функции в качестве аргументов, или функции, которые возвращают функцию в качестве своего результата.
Когда я был новичком в JavaScript, мне потребовалось некоторое время, чтобы понять, что они из себя представляют, поэтому, если вы находитесь в этом положении, то, надеюсь, после прохождения этого поста у вас будет более четкое представление о них.
С учетом сказанного, вот пять примеров функций высшего порядка в JavaScript для лучшего понимания.
1. .map
, .forEach
и т. Д.
Если вы использовали JavaScript хотя бы день, скорее всего, вы уже работали с функциями высшего порядка с помощью собственных методов массива JavaScript, таких как .map
.
Приведенный ниже фрагмент проходит по массиву и вызывает функцию для каждого элемента, пока не будет достигнут последний элемент. Возможность принимать функцию, которую он может вызывать, делает ее функцией высшего порядка:
2. Использование функций высшего порядка для поддержки нескольких вариантов операции.
Иногда мы решаем создать функцию более высокого порядка, чтобы мы могли использовать ее для создания большего количества вариантов желаемой операции.
В приведенном ниже примере базовая функция utilizePrefixer
- это функция высшего порядка, которая возвращает функцию, которая принимает word
в качестве аргумента и применяет префикс к возвращаемому значению.
3. Смена контроля
Всякий раз, когда вы находитесь в ситуации, когда вам нужно реорганизовать кучу кода, который указывает на одну функцию, вы можете создать расширенную функцию, которая может изменить направление, в котором проходит ваш код.
Я собираюсь скопировать и вставить пример из более ранней публикации, потому что это хороший пример, чтобы донести эту мысль:
На моей предыдущей работе мы использовали react-toastify для отображения уведомлений. Мы использовали его везде. Кроме того, они также делают отличные аварийные выходы для быстрых решений UX в последнюю минуту: Как мы должны справиться с этой ошибкой? Просто покажите всплывающее уведомление! Выполнено.
Однако мы начали замечать, когда приложение стало больше, и уровень сложности подкрался к нам, наши тост-уведомления становились слишком частыми. Это нормально, но у нас не было способа предотвратить дублирование. Это означало, что некоторые всплывающие уведомления отображались на экране несколько раз, даже если они были точно такими же, как и тост над ним.
В итоге мы использовали API, который предоставляет библиотека для удаления активных всплывающих уведомлений по идентификатору с использованием toast.dismiss()
.
Чтобы объяснить предстоящие части, вероятно, будет хорошей идеей показать файл, из которого мы импортировали тосты, прежде чем продолжить:
А теперь потерпите, я знаю, что это может показаться не привлекательным, но обещаю, что через две минуты все станет лучше.
Это то, что у нас было в отдельном компоненте, чтобы проверить, был ли предыдущий тост уже на экране, и если он был, он попытается удалить этот тост и повторно отобразить новый тост.
Это работало нормально, однако в приложении были и другие тосты, которые нужно было изменить таким же образом. Нам пришлось просмотреть каждый файл, который отображает всплывающее уведомление, чтобы удалить дубликаты.
Когда мы подумали о просмотре каждого файла в 2019 году, мы сразу поняли, что это не решение. Поэтому мы просмотрели файл util/toast.js
и изменили его, чтобы решить нашу проблему. Вот как это выглядело потом:
src/util/toast.js
:
Вместо того, чтобы просматривать каждый файл, самым простым решением было создание функции высшего порядка. Это позволило нам поменять роли, поэтому вместо того, чтобы искать в файлах, тосты были направлены на нашу функцию более высокого порядка.
Таким образом, код в файлах не был изменен или изменен. Все по-прежнему функционировало как обычно, и мы получили возможность удалять повторяющиеся тосты, не отправляясь никуда писать ненужный код в конце. Это сэкономило время.
4. Составление
Функции высшего порядка начинают проявляться намного ярче, когда вы начинаете их составлять. Можно выбрать сочинение по многим причинам. В приведенном ниже примере мы составляем по той причине, что мы хотим предотвратить повторение цикла JavaScript над массивом лягушек для каждой .filter
операции:
Это может избавить нас от необходимости писать такой повторяющийся код повсюду в нашем приложении:
5. Внутреннее состояние
Стоит упомянуть, что когда мы создаем функцию более высокого порядка, мы также можем создать некоторое локальное состояние внутри области видимости, и оно будет кэшироваться для будущих операций:
Заключение
На этом мы завершаем эту статью. Я надеюсь, что вы нашли это ценным и ждете большего в будущем!