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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

Наприклад, функція вищого порядку може бути використана для реалізації незмінної частини алгоритму, у той час як змінна частина має бути реалізована у функції, що передається аргументом. Типовим прикладом може бути функція сортування даних. Сортування даних потребує порівняння екземплярів даних, яке може бути різним для різних типів даних. Без використання функції вищого порядку було б необхідно створювати окрему функцію сортування для кожного типу даних. Але ж, зазвичай, сам алгоритм сортування не залежить від алгоритму порівняння й залежить лише від результату цього порівняння. Можливість вказати, як аргумент виклику, яку саме функцію порівняння треба використовувати для цього виклику, дає можливість створити універсальну функцію сортування. У той же час, та ж сама функція порівняння може бути використана як аргумент й для інших функцій вищого порядку, наприклад, для функцій пошуку максимального чи мінімального елементу.

Використання функцій вищого порядку призводить до абстрактних і компактних програм, беручи до уваги складність вироблених ними обчислень[1]. Іноді функції вищого порядку називають функторами хоча це не зовсім правильно, з математичної точки зору вони є функціоналами чи операторами.

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

Приклад[ред. | ред. код]

Наступний код містить функцію вищого порядку 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));

Альтернативи[ред. | ред. код]

Примітки[ред. | ред. код]

  1. А. Філд, П. Харрісон, Функціональне програмування, Стор. 55 [Розділ 3: Функції вищого порядку].

Джерела[ред. | ред. код]

  • А. Філд, П. Харрісон Функціональне програмування: Пер. з англ. - М.: Мир, 1993. - 637 с, іл. ISBN 5-03-001870-0.

Див. також[ред. | ред. код]