Функции высшего порядка: мощный инструмент функционального программирования

May 03 2023
Если вы изучаете JavaScript, вы, вероятно, сталкивались с термином «Функции высшего порядка». Проще говоря, функции высшего порядка — это функции, которые оперируют другими функциями.

Если вы изучаете JavaScript, вы, вероятно, сталкивались с термином «Функции высшего порядка». Проще говоря, функции высшего порядка — это функции, которые оперируют другими функциями. Они могут принимать функции в качестве аргументов или возвращать их в качестве вывода.

Принятие в JavaScript функций высшего порядка делает его идеальным для функционального программирования. Функциональное программирование — это парадигма программирования, в которой вы можете передавать функции в качестве параметров другим функциям, а также возвращать их в виде значений. В функциональном программировании мы думаем и программируем с точки зрения функций. JavaScript, Haskell, Clojure, Scala и Erlang — это лишь некоторые из языков, реализующих функциональное программирование.

JavaScript рассматривает функции как граждан первого класса. Это потому, что функции являются объектами. Мы можем добавлять свойства к функциям так же, как мы делаем это с объектами. Например:

function greeting() {
  console.log('Hello World');
}

// We can add properties to functions like we do with objects
greeting.lang = 'English';

// Prints 'English'
console.log(greeting.lang);

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

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

  • Массив.прототип.карта()
  • Массив.прототип.фильтр()
  • Массив.прототип.уменьшить()
  • Массив.prototype.forEach()
  • EventTarget.addEventListener()

1- Array.prototype.map(): эта функция более высокого порядка создает новый массив, вызывая предоставленную функцию для каждого элемента в исходном массиве. Предоставленная функция может каким-то образом преобразовывать каждый элемент. Например, если у вас есть массив чисел и вы хотите удвоить каждое число, вы можете использовать mapследующее:

const originalArray = [1, 2, 3];
const doubledArray = originalArray.map(num => num * 2);
// doubledArray is now [2, 4, 6]

const originalArray = [1, 2, 3, 4, 5, 6];
const evenArray = originalArray.filter(num => num % 2 === 0);
// evenArray is now [2, 4, 6]

const originalArray = [1, 2, 3, 4, 5];
const sum = originalArray.reduce((accumulator, currentValue) => accumulator + currentValue, 0);
// sum is now 15

const names = ['Alice', 'Bob', 'Charlie'];
names.forEach(name => console.log(name));
// this will log "Alice", "Bob", and "Charlie" to the console

const button = document.getElementById('myButton');
button.addEventListener('click', () => alert('Button clicked!'));
// this will show an alert when the button is clicked

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

function mapArray(arr, callback) {
  const result = [];
  for (let i = 0; i < arr.length; i++) {
    result.push(callback(arr[i]));
  }
  return result;
}

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

const numbers = [1, 2, 3, 4, 5];

function multiplyByTwo(num) {
  return num * 2;
}

const doubledNumbers = mapArray(numbers, multiplyByTwo);

console.log(doubledNumbers); // Output: [2, 4, 6, 8, 10]

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

Заключение

Таким образом, мы изучили концепцию функций высшего порядка и различные доступные встроенные функции высшего порядка. Кроме того, мы научились создавать собственные функции высшего порядка. Эти функции обладают уникальной возможностью получать и возвращать другие функции в качестве аргументов и выходных данных, что делает их мощным инструментом программирования. Если вы нашли эту статью полезной, поставьте лайк , подпишитесь на меня на Medium и не стесняйтесь оставлять комментарии, если у вас есть какие-либо вопросы или проблемы. Спасибо за чтение!