JavaRush /Курси /Frontend SELF UA /Функції вищого порядку

Функції вищого порядку

Frontend SELF UA
Рівень 37 , Лекція 4
Відкрита

5.1 Основні концепції

Функції вищого порядку є важливим аспектом функціонального програмування і широко використовуються в JavaScript. Вони дозволяють писати більш абстрактний, компактний і багаторазово використовуваний код.

Що таке функції вищого порядку?

Функції вищого порядку (higher-order functions) — це функції, які приймають як аргументи інші функції або повертають функції як результат. Вони дозволяють використовувати функції як об'єкти першого класу, що дає можливість створювати більш абстрактні та модульні програми.

Приклади функцій вищого порядку

  1. Передача функцій як аргументів.
  2. Повернення функцій з інших функцій.

5.2 Передача функцій як аргументів

Використання вбудованих методів масивів

JavaScript надає багато вбудованих методів для роботи з масивами, які є функціями вищого порядку, такими як forEach(), map(), filter(), reduce() та інші.

1. Метод forEach()

Метод forEach() виконує вказану функцію один раз для кожного елемента масиву.

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

      numbers.forEach(function(number) {
        console.log(number);
      });
      // Виведе: 1 2 3 4 5
    
  

2. Метод map()

Метод map() створює новий масив з результатами виклику вказаної функції для кожного елемента масиву.

JavaScript
    
      const numbers = [1, 2, 3, 4, 5];
      const squaredNumbers = numbers.map(function(number) {
        return number * number;
      });

      console.log(squaredNumbers);
      // Виведе: [1, 4, 9, 16, 25]
    
  

3. Метод filter()

Метод filter() створює новий масив з усіма елементами, які пройшли перевірку, що задається у переданій функції.

JavaScript
    
      const numbers = [1, 2, 3, 4, 5];
      const evenNumbers = numbers.filter(function(number) {
        return number % 2 === 0;
      });

      console.log(evenNumbers);
      // Виведе: [2, 4]
    
  

4. Метод reduce()

Метод reduce() застосовує функцію до акумулятора та кожного елемента масиву (зліва направо), зводячи його до єдиного значення.

JavaScript
    
      const numbers = [1, 2, 3, 4, 5];
      const sum = numbers.reduce(function(total, number) {
        return total + number;
      }, 0);

      console.log(sum);
      // Виведе: 15
    
  

5.3 Повернення функцій з інших функцій

Функції вищого порядку можуть повертати інші функції, що дозволяє створювати більш гнучкі та налаштовувані функції.

1. Карування (Currying)

Карування — це процес перетворення функції, яка приймає кілька аргументів, у функцію, яка приймає один аргумент і повертає нову функцію, яка приймає наступний аргумент і так далі.

Приклад карування:

JavaScript
    
      function multiply(a) {
        return function(b) {
          return a * b;
        };
      }

      const multiplyByTwo = multiply(2);
      console.log(multiplyByTwo(5)); // Виведе: 10

      const multiplyByThree = multiply(3);
      console.log(multiplyByThree(5)); // Виведе: 15
    
  

2. Створення налаштовуваних функцій

Функції вищого порядку дозволяють створювати функції, які можна налаштувати за допомогою аргументів.

Приклад:

JavaScript
    
      function createGreeting(greeting) {
        return function(name) {
          console.log(`${greeting}, ${name}!`);
        };
      }

      const sayHello = createGreeting('Hello');
      sayHello('Alice'); // Виведе: Hello, Alice!

      const sayHi = createGreeting('Hi');
      sayHi('Bob'); // Виведе: Hi, Bob!
    
  

5.4 Практичне застосування

Розглянемо практичне застосування функцій вищого порядку.

Функція compose()

Функція compose() дозволяє об'єднувати кілька функцій в одну, яка застосовує їх послідовно:

JavaScript
    
      function compose(...functions) {
        return function(initialValue) {
          return functions.reduceRight((value, func) => func(value), initialValue);
        };
      }

      const addOne = x => x + 1;
      const double = x => x * 2;
      const addOneAndDouble = compose(double, addOne);
      console.log(addOneAndDouble(5)); // Виведе: 12 (спочатку додає 1 до 5, потім подвоює результат)
    
  

Асинхронні функції вищого порядку

Асинхронні функції вищого порядку дозволяють працювати з асинхронними операціями, такими як запити до API або робота з таймерами:

JavaScript
    
      function fetchData(callback) {
        setTimeout(() => {
          callback('Data received');
        }, 1000);
      }

      function processData(data) {
        console.log(data);
      }

      fetchData(processData);
      // Виведе: Data received (через 1 секунду)
    
  
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ