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

Более высокого порядка? Что вообще означает порядок?

Не волнуйтесь, я объясню вам это человеческим языком.

На самом деле его концепция очень проста.

Это просто функция, которая принимает параметр (как обычная функция!), но ее параметр не является обычным значением.

Так что же это тогда?

Его параметр является частью его функциональности.

Но почему ?

Отступим немного назад.

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

Иногда вы думаете: «Хм… зачем мне снова это писать? Он очень похож на тот».

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

Так же, как обычные функции с разными значениями в качестве параметра.

Но как мы это делаем?

Мы делаем это с помощью Функции высшего порядка.

По сути, функция высшего порядка — это многократно используемая функция, которая получает часть своей функциональности от своего параметра.

Его цель одна: Обобщение нашей функции. Чтобы сделать его повторно используемым во многих местах нашего кода с похожим, но немного другим вариантом использования.

Круто, не так ли?

Это соответствует ключевому принципу программирования:
Не повторяйтесь (DRY).

И если вы похожи на меня, мне нравится писать что-то, что можно использовать в разных местах.

Мне кажется, что я что-то изобретаю, и это приносит удовлетворение.

Теперь давайте начнем с небольшого примера.

Предположим, у нас есть функция, которая принимает массив и возвращает массив с элементами, деленными на 2:

(Да, я знаю, что в этом примере используется этот «жестокий» цикл for. Он сделан специально, чтобы сделать функцию несколько длинной, но простой для понимания)

Теперь, в другом месте нашего кода, у нас есть "похожая, но немного отличающаяся" функция от предыдущей, которая принимает и массив и возвращает массив с элементами, умноженными на 2 :

Затем у нас есть функция «этого» типа, опять же, где-то еще в нашем коде:

Теперь это кажется повторяющимся, и наш код становится излишне большим.

Я знаю, как ты себя чувствуешь.

И да, мы нарушаем принцип DRY.

Итак, как тогда упростить эти функции?

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

Но можем ли мы передать строку типа «+ 3» и поместить ее в нашу функцию?

Нет, мы не можем сделать это в Javascript.

Тогда как мы это делаем?
Мы делаем это функцией, а затем передаем ее как параметр.

Теперь это наша функция «Использовать где угодно»:

Мы также дали ему общее имя, copyArrayAndManipulate().

Нам просто нужно вызывать его с разными параметрами каждый раз, когда нам нужна немного другая функциональность (см. последнюю строку).

Теперь у нас есть повторно используемая функция, а наш код стал меньше и абстрагирован.

Вот и все!

Надеюсь, теперь вы понимаете функцию высшего порядка в Javascript. Поздравляю! 🎉

Бонус: если вы знакомы с функциями отображения, фильтрации и редукции, теперь вы знаете, как они работают внутри.

Да, в основном это функции высшего порядка, которые берут ваш массив и вашу функцию, а затем возвращают копию вашего измененного массива.

В основном то же самое, что и copyArrayAndManipulate, который мы использовали ранее!

Например = myArray.map(function(element) { return element * 2 })
Arrow version = myArray.map((element) =› element * 2 ).

Увидимся в следующий раз !

Свяжитесь со мной по адресу:
https://www.linkedin.com/in/fadhil-radhian/
Github: fadhilradh

Скриншоты предоставлены:
Твиттер: @willsentance