Топ питань
Часова шкала
Чат
Перспективи
Функція вищого порядку
З Вікіпедії, вільної енциклопедії
Remove ads
Функція вищого порядку — функція, що приймає як аргументи інші функції або повертає іншу функцію як результат. Основна ідея полягає в тому, що функції мають той же статус, що й інші об'єкти даних.
Наприклад, функція вищого порядку може бути використана для реалізації незмінної частини алгоритму, у той час як змінна частина має бути реалізована у функції, що передається аргументом. Типовим прикладом може бути функція сортування даних. Сортування даних потребує порівняння екземплярів даних, яке може бути різним для різних типів даних. Без використання функції вищого порядку було б необхідно створювати окрему функцію сортування для кожного типу даних. Але ж, зазвичай, сам алгоритм сортування не залежить від алгоритму порівняння й залежить лише від результату цього порівняння. Можливість вказати, як аргумент виклику, яку саме функцію порівняння треба використовувати для цього виклику, дає можливість створити універсальну функцію сортування. У той же час, та ж сама функція порівняння може бути використана як аргумент й для інших функцій вищого порядку, наприклад, для функцій пошуку максимального чи мінімального елементу.
Використання функцій вищого порядку призводить до абстрактних і компактних програм, беручи до уваги складність вироблених ними обчислень[1]. Іноді функції вищого порядку називають функторами хоча це не зовсім правильно, з математичної точки зору вони є функціоналами чи операторами.
У функціональних мовах програмування всі функції, що приймають декілька аргументів, є функціями вищого порядку, оскільки вони є каррінгованими, що дає можливість наче частково виконати функцію, в результаті чого отримати нову функцію вже від меншого числа аргументів.
Remove ads
Приклад
Наступний код містить функцію вищого порядку square()
, яка як перший аргументу приймає функцію. У результаті на екран буде виведено «100» (результат обчислення (7 +3) × (7 +3)).
Python
def square(function, x):
return function(x) * function(x)
def f(x):
return x + 3
print(square(f, 7))
F#
let square func x = (func x) * (func x)
let f x = x + 3
square f 7
JavaScript
let square = (func, x) => func(x) * func(x);
console.log(square(x => x + 3, 7));
Remove ads
Альтернативи
- Вказівник на функцію
- Макрос
- Динамічне виконання коду
- Вкладена функція
- Шаблонний метод в ООП
Примітки
Джерела
Див. також
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads