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

5739d4df e652 496a 930f ff5253b7b097 HTML

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

Содержание

  1. Зачем отказываться от циклов?
  2. Перебор массива и создание нового измененного массива
  3. Перебор массива и выполнение действия
  4. Фильтрация массива
  5. Манипуляции с элементами массива
  6. Проверка массива на наличие значения
  7. Проверка элементов массива на соответствие условию

Зачем отказываться от циклов?

Использование функций высшего порядка улучшает ваш код, делая его:

  • Читаемым
  • Понятным
  • Легким для внесения изменений и модификаций

Рассмотрим несколько примеров.

Перебор массива и создание нового измененного массива

С использованием цикла:

var names = ["Jack", "Jecci", "Ram", "Tom"];
var upperCaseNames = [];

for (let i = 0, totalNames = names.length; i < totalNames; i++) {
upperCaseNames.push(names[i].toUpperCase());
}

С использованием функции высшего порядка:

var names = ["Jack", "Jecci", "Ram", "Tom"];
var upperCaseNames = names.map(name => name.toUpperCase());

Перебор массива и выполнение действия

С использованием цикла:

function print(name) {
console.log(name);
}

var names = ["Jack", "Jecci", "Ram", "Tom"];

for (let i = 0, totalNames = names.length; i < totalNames; i++) {
print(names[i]);
}

С использованием функции высшего порядка:

var names = ["Jack", "Jecci", "Ram", "Tom"];
names.forEach(name => print(name));

Фильтрация массива

С использованием цикла for:

function isOdd(n) {
return n % 2;
}

var numbers = [1, 2, 3, 4, 5];
var odd = [];

for (let i = 0, total = numbers.length; i < total; i++) {
let number = numbers[i];
if (isOdd(number)) {
odd.push(number);
}
}

С использованием функции высшего порядка:

var numbers = [1, 2, 3, 4, 5, 6, 7];
var odd = numbers.filter(n => n % 2); // single line

Манипуляции с элементами массива

Получение суммы элементов массива с помощью цикла:

var numbers = [1, 2, 3, 4, 5];
var result = 0;

for (let i = 0, total = numbers.length; i < total; i++) {
result += numbers[i];
}

С использованием функции высшего порядка:

var numbers = [1, 2, 3, 4, 5, 6, 7];

var result = numbers.reduce((acc, val) => acc + val, 0);

Проверка массива на наличие значения

С использованием цикла:

var names = ["ram", "raj", "rahul"];

for (let i = 0, totalNames = names.length; i < totalNames; i++) {
if (names[i] === "rahul") {
console.log("%c found rahul", "color:red");
return;
}
}

С использованием функции высшего порядка:

var names = ["ram", "raj", "rahul"];

let isRahulPresent = names.some(name => name === "rahul");

if (isRahulPresent) {
console.log("%c found rahul", "color:red");
}

Проверка элементов массива на соответствие условию

С использованием цикла:

var num = [1, 2, 3, 4, 5, 0];

for (let i = 0, total = num.length; i < total; i++) {
if (num[i] <= 0) {
console.log("0 present in array");
break;
}
}

С использованием функции высшего порядка:

var num = [1, 2, 3, 4, 5, 0];
var isZeroFree = num.every(e => e > 0);

if (!isZeroFree) {
console.log("0 present in array");
}

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

Оцените статью