Функции ветвления с конвергенцией

Beginner

This tutorial is from open-source community. Access the source code

Введение

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

Функции конвергенции

Для практики программирования откройте Терминал/SSH и введите node.

Эта функция converge принимает функцию конвергенции и список функций ветвления в качестве входных данных. Она возвращает новую функцию, которая применяет каждую функцию ветвления к входным аргументам. Результаты функций ветвления затем передаются в качестве аргументов в функцию конвергенции.

Методы Array.prototype.map() и Function.prototype.apply() используются для применения каждой функции к входным аргументам. Затем оператор расширения (...) используется для вызова converger с результатами всех других функций.

Вот код для функции converge:

const converge =
  (converger, fns) =>
  (...args) =>
    converger(...fns.map((fn) => fn.apply(null, args)));

Ниже показан пример использования этой функции. Функция average создается путем вызова converge с анонимной функцией, которая вычисляет среднее значение массива. Функции ветвления - это две анонимные функции, которые вычисляют сумму массива и его длину соответственно.

const average = converge(
  (a, b) => a / b,
  [(arr) => arr.reduce((a, v) => a + v, 0), (arr) => arr.length]
);
average([1, 2, 3, 4, 5, 6, 7]); // 4

Этот код вычисляет среднее значение массива [1, 2, 3, 4, 5, 6, 7] и возвращает 4.

Резюме

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