Какую функцию выполняет func(), то есть в чем смысл использования этой функции там.
function sum(x, y){
return x + y;
}
function subtract(x, y){
return x - y;
}
function operation(x, y, func){
var result = func(x, y);
console.log(result);
}
console.log("Sum");
operation(10, 6, sum); // 16
console.log("Subtract");
operation(10, 6, subtract); // 4
Если вкратце: потому что так удобнее
Давайте разберем общую ситуацию: нужно отсортировать массив. У нас есть функция sort
, которая принимает массив и сортирует его, а еще нам нужен признак, по которому нужно отсортировать элементы, пусть это будет цена:
// Псевдокод
function sort(array) {
// Реализация какой-то сортировки: быстрая, пузырьковая - неважно
// Важен вот этот момент:
if (признак по которому а больше b) {
// Ставим a первее b
} else {
// Наоборот
}
}
И вот у нас есть функция сортировки по цене. Красивая, супербыстрая и эффективная. Только вот вдруг нам понадобилось в другом месте сортировать по дате. Что же делать? Снова писать ту же самую функцию сортировки, только сравнивать даты, а не цену? Если подумать, то различие будет только в одном месте:
if (признак по которому а больше b) {
// Ставим a первее b
} else {
// Наоборот
}
Тут-то нам и помогает вспомогательная функция. Что если вынести этот момент во внешнюю функцию, а остальную сортировку сделать общей? Тогда получится примерно так
function sortFn(a, b) {
if (признак по которому а больше b) {
// Ставим a первее b
} else {
// Наоборот
}
}
function(array, fn) {
// Где-то в коде
sortFn(a, b);
}
Теперь у нас есть одна общая функция сортировки, меняется только признаки, по которым мы сортируем, и мы можем описывать их отдельными маленькими функциями, каждый раз не дублируя большую функцию сортировки.
Так же работаю forEach
, map
, filter
- функции, где есть какая-то общая часть, но уникальные условия для каждого конкретного случая.
Что касается вашего случая, он очень простой, чтобы увидеть профит. Но давайте представим, что у нас в функции operation
происходит еще много чего
function operation(x, y, func) {
// Считаем попугаев, валидируем, взламываем пентагон.
// много строчек кода...
// Готово
var result = func(x, y);
console.log(result);
}
Без третьего параметра, нам бы пришлось делать все доп операции прямо в sum
, substract
и вообще в любой операции, что является дублированием кода и плохо масштабируется, а так, вся общая логика в одном месте, меняется лишь главная часть, которая зависит от конкретных желаний.
Как бы было без третьего параметра:
function sumOpeartion(x, y){
const result = x + y;
console.log(result);
}
function subtractOperation(x, y){
const result = x - y;
console.log(result);
}
console.log("Sum");
sumOpeartion(10, 6); // 16
console.log("Subtract");
subtractOperation(10, 6); // 4
func в operation - лишь переменная, в которую вы передаёте другую функцию, когда вызываете operation. Как мы видим - помимо operation есть ещё 2 функции, и когда вы вызываете operation, вы указываете х, у, а так же название функции (sum либо subtract). Внутри operation указанная функция выполняется при обращении к func()
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вот у меня есть задание, знаю что легче через структуру FILE, но задание - сделать с fstreamЗаписываем информацию про студентов: имя, группа, оценки...
Всем привет, возникла у меня необходимость в функции для работы с данными из структурыЯ решил сделать функцию частью структуры, у меня сразу...
Первым пунктом новости о выходе Qt 513 является объявление стабильного выпуска Qt for WebAssembly - поддержка исполнения Qt приложений в современных...