Функція вищого порядку — функція, що приймає як аргументи інші функції або повертає іншу функцію як результат. Основна ідея полягає в тому, що функції мають той же статус, що й інші об'єкти даних.
Наприклад, функція вищого порядку може бути використана для реалізації незмінної частини алгоритму, у той час як змінна частина має бути реалізована у функції, що передається аргументом. Типовим прикладом може бути функція сортування даних. Сортування даних потребує порівняння екземплярів даних, яке може бути різним для різних типів даних. Без використання функції вищого порядку було б необхідно створювати окрему функцію сортування для кожного типу даних. Але ж, зазвичай, сам алгоритм сортування не залежить від алгоритму порівняння й залежить лише від результату цього порівняння. Можливість вказати, як аргумент виклику, яку саме функцію порівняння треба використовувати для цього виклику, дає можливість створити універсальну функцію сортування. У той же час, та ж сама функція порівняння може бути використана як аргумент й для інших функцій вищого порядку, наприклад, для функцій пошуку максимального чи мінімального елементу.
Використання функцій вищого порядку призводить до абстрактних і компактних програм, беручи до уваги складність вироблених ними обчислень. Іноді функції вищого порядку називають функторами хоча це не зовсім правильно, з математичної точки зору вони є функціоналами чи операторами.
У функціональних мовах програмування всі функції, що приймають декілька аргументів, є функціями вищого порядку, оскільки вони є каррінгованими, що дає можливість наче частково виконати функцію, в результаті чого отримати нову функцію вже від меншого числа аргументів.
Приклад
Наступний код містить функцію вищого порядку square()
, яка як перший аргументу приймає функцію. У результаті на екран буде виведено «100» (результат обчислення (7 +3) × (7 +3)).
def square(function, x): return function(x) * function(x) def f(x): return x + 3 print(square(f, 7))
let square func x = (func x) * (func x) let f x = x + 3 square f 7
let square = (func, x) => func(x) * func(x); console.log(square(x => x + 3, 7));
Альтернативи
- Вказівник на функцію
- Макрос
- Динамічне виконання коду
- Вкладена функція
- Шаблонний метод в ООП
Примітки
- А. Філд, П. Харрісон, Функціональне програмування, Стор. 55 [Розділ 3: Функції вищого порядку].
Джерела
- А. Філд, П. Харрісон Функціональне програмування: Пер. з англ. - М.: Мир, 1993. - 637 с, іл. .
Див. також
- (Декоратори в Python)
Ця стаття потребує додаткових для поліпшення її . (грудень 2015) |
Це незавершена стаття про інформаційні технології. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Funkciya vishogo poryadku funkciya sho prijmaye yak argumenti inshi funkciyi abo povertaye inshu funkciyu yak rezultat Osnovna ideya polyagaye v tomu sho funkciyi mayut toj zhe status sho j inshi ob yekti danih Napriklad funkciya vishogo poryadku mozhe buti vikoristana dlya realizaciyi nezminnoyi chastini algoritmu u toj chas yak zminna chastina maye buti realizovana u funkciyi sho peredayetsya argumentom Tipovim prikladom mozhe buti funkciya sortuvannya danih Sortuvannya danih potrebuye porivnyannya ekzemplyariv danih yake mozhe buti riznim dlya riznih tipiv danih Bez vikoristannya funkciyi vishogo poryadku bulo b neobhidno stvoryuvati okremu funkciyu sortuvannya dlya kozhnogo tipu danih Ale zh zazvichaj sam algoritm sortuvannya ne zalezhit vid algoritmu porivnyannya j zalezhit lishe vid rezultatu cogo porivnyannya Mozhlivist vkazati yak argument vikliku yaku same funkciyu porivnyannya treba vikoristovuvati dlya cogo vikliku daye mozhlivist stvoriti universalnu funkciyu sortuvannya U toj zhe chas ta zh sama funkciya porivnyannya mozhe buti vikoristana yak argument j dlya inshih funkcij vishogo poryadku napriklad dlya funkcij poshuku maksimalnogo chi minimalnogo elementu Vikoristannya funkcij vishogo poryadku prizvodit do abstraktnih i kompaktnih program beruchi do uvagi skladnist viroblenih nimi obchislen Inodi funkciyi vishogo poryadku nazivayut funktorami hocha ce ne zovsim pravilno z matematichnoyi tochki zoru voni ye funkcionalami chi operatorami U funkcionalnih movah programuvannya vsi funkciyi sho prijmayut dekilka argumentiv ye funkciyami vishogo poryadku oskilki voni ye karringovanimi sho daye mozhlivist nache chastkovo vikonati funkciyu v rezultati chogo otrimati novu funkciyu vzhe vid menshogo chisla argumentiv PrikladNastupnij kod mistit funkciyu vishogo poryadku square yaka yak pershij argumentu prijmaye funkciyu U rezultati na ekran bude vivedeno 100 rezultat obchislennya 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 gt func x func x console log square x gt x 3 7 AlternativiVkazivnik na funkciyu Makros Dinamichne vikonannya kodu Vkladena funkciya Shablonnij metod v OOPPrimitkiA Fild P Harrison Funkcionalne programuvannya Stor 55 Rozdil 3 Funkciyi vishogo poryadku DzherelaA Fild P Harrison Funkcionalne programuvannya Per z angl M Mir 1993 637 s il ISBN 5 03 001870 0 Div takozhDekoratori v PythonCya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno gruden 2015 Ce nezavershena stattya pro informacijni tehnologiyi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi