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

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

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

Використання функцій вищого порядку призводить до абстрактних і компактних програм, беручи до уваги складність вироблених ними обчислень[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.

Див. також

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.