Анонимна функция: Разлика между версии
Изтрито е съдържание Добавено е съдържание
м без интервал |
м без интервал; козметични промени |
||
Ред 9:
Ако дадена функция се използва само веднъж или ограничен брой пъти, е подходящо да бъде създадена като анонимна, тъй като това я прави синтактично по-лека, отколкото именувана функция. Във функционалните езици и други езици с функции от първи клас анонимните функции се използват навсякъде, където те изпълняват същата роля за вида на функцията, както правят литералите за други типове данни.
Произходът на анонимните функции е свързан с работата на [[Алонсо Чърч]] и неговата теория за [[ламбда смятане]], (създадена преди ерата на компютрите), в която всички функции са анонимни.<ref>Fernandez, Maribel (2009),
Анонимните функции са форма на вложена функция, в която е позволен достъпа до променливи в обхвата на съдържащата функция. Ето защо анонимните функции трябва да бъдат имплементирани чрез използването на затваряне. За разлика от именуваните вложени функции, те не могат да бъдат рекурсивни без помощта на т.нар. оператор на неподвижната точка (т.нар. анонимна неподвижна точка или анонимна рекурсия).<ref>''[https://www.cs.cornell.edu/Courses/cs3110/2012sp/lectures/lec29-fixpoints/lec29.html "Lecture 29: Fixpoints and Recursions"]. CS3110 Spring 2012
== Приложение ==
Анонимните функции могат да се използват за съдържащи функционалност, които не се нуждаят от наименуване и имат възможност за
Употребата на анонимните функции е въпрос на стил. Използването им никога не е единственият начин за решаване на проблем: всяка анонимна функция може да бъде дефинирана като именувана функция и наричана по име. Някои програмисти използват анонимните функции за капсулиране на специфични еднократни кодове, за да не се усложнява основния код с много едноредови нормални функции.
В някои програмни езици, анонимните функции често се имплементират за всяка специфична цел като свързващи събития за обратно извикване, или
Целият код в следващата секция е написан на [[Python]] 2.x (not 3.x).
Ред 69:
}
}
</syntaxhighlight>В
== Сортиране ==
При сортиране по нестандартен начин може да бъде по-лесно да се използва логическо сравнение в анонимна функция вместо да се създава именувана функция. Повечето езици позволяват
Сортиране на списък от низове по дължина на низа:<syntaxhighlight lang="python">
Ред 81:
</syntaxhighlight>Анонимната функция в примера е ламбда израз:<syntaxhighlight lang="python">
lambda x,y: cmp(...)
</syntaxhighlight>Анонимната функция приема два аргумента, х и у, и връща
>>> a = [10, 'number', 11.2]
>>> a.sort(lambda x,y: cmp(x.__class__.__name__, y.__class__.__name__))
Ред 93:
Затварянето в програмирането е такава функция, която запазва обектите дефинирани в нейната среда на видимост, поне докато те се използват или са реферирани. Затварянията обикновено се ползват в езици, в които функциите са обекти от първи клас, с други думи езици, които позволяват функции да бъдат аргументи, да бъдат връщани като резултат от други функции от по-висок ред, да бъдат запазвани като променливи, подобно на примитивни типове (напр. int или string).
В следващия пример чрез анонимна функция се сравнява стойността на входящата променлива х с дадена променлива
def comp(threshold):
return lambda x: x < threshold
Ред 491:
=== Lua ===
В Lua всички функции са анонимни. "Именуваната функция " в Lua е просто една променлива, която държи референция към обектна функция. <ref>[http://www.lua.org/pil/6.html "Programming in Lua – More and Functions"].
По този начин в Lua:<syntaxhighlight lang="lua">
|