Anonimna funkcija
<s>U programiranju, anonimna funkcija je funkcija definisana tako da nije vezana za identifikator.</s><s>Anonimne funkcije su često:
 argumenti prosleđeni funkcijama višeg reda, ili
 se koriste za konstruisanje rezultata funkcije višeg reda koja treba da vrati funkciju.</s>

<s>Ako se funkcija koristi jednom, ili ograničen broj puta, anonimna funkcija može biti sintaksički "lakša" od korišćenja imenovane funkcije.</s><s>Anonimne funkcije su česte u jezicima funkcionalnog programiranja i jezicima koji podržavaju funkcije prve klase (first-class funkcije), gde ispunjavaju ulogu tipa funkcije kao što literali rade za tipove podataka.</s>

<s>Anonimne funkcije je uveo Alonzo Čerč kada je otkrio lambda račun 1936. godine, pre nastanka elektronskih računara, kada su sve funkcije bile anonimne.</s><s>U nekoliko programskih jezika, anonimne funkcije su predstavljene ključnom rečju lambda, i anonimne funkcije se često nazivaju lambdama ili lambda apstrakcijama.</s><s>Anonimne funkcije su deo programskih jezika još od nastanka programskog jezika Lisp 1958. i sve veći broj modernih programskih jezika podržava anonimne funkcije.</s><s>Takođe anonimne funkcije se mogu posmatrati kao forma ugnježdenih funkcija.</s>

<s>Upotreba 
Anonimne funkcije mogu biti korišćene za funkcionalnost koja ne treba biti imenovana i za kratkotrajnu upotrebu.</s><s>Neki bitniji primeri su u korišćenju closure i currying funkcija.</s>

<s>Korišćenje anonimnih funkcija je pitanje stila.</s><s>Njihovo korišćenje nikada nije jedini način za rešavanje problema; Svaka anonimna funkcija može biti definisana imenovanom funkcijom i biti pozivana imenom.</s><s>Neki programeri koriste anonimne funkcije za pisanje kodova koji se neće izvršavati više puta, a u sebi sadrži veliki broj jednolinijskih funkcija.</s>

<s>U nekim programskim jezicima, anonimne funkcije se često implementiraju za veoma specifične potrebe kao što je korišćenje u obliku callback funkcija, ili instanciranje funkcije za konkretne vrednosti, koje mogu biti efikasnije, čitljivije i manje sklone greškama nego imenovane funkcije.</s>

<s>Kod u sledećim primerima je napisan u jeziku Python 2.x .</s>

<s>Sortiranje 
Kad pokušavamo da sortiramo nestandardnim načinom, korišćenje anonimne funkcije u komparacione svrhe može biti jednostavnije od korišćenja imenovanih funkcija.</s><s>Većina jezika nudi generičku funkciju koja implementira algoritam za sortiranje koji će sortirati proizvoljne objekte.</s><s>Ove funkcije obično primaju proizvolju funkciju poređenja koja prima dva proizvoljna objekta i vraća vrednosti manje od 0, 0 ili veće od 0 u odnosu na to da li je drugi prosleđen objekat veći, jednak ili manji od prvog prosleđenog.</s>

<s>Sortiranje liste stringova po njihovoj dužini:>>> a = ['house', 'car', 'bike']
>>> a.sort(lambda x,y: cmp(len(x), len(y)))
>>> print(a)
['car', 'bike', 'house']Anonimna funkcija u ovom primeru je lambda izraz:lambda x,y: cmp(...)Anonimna funkcija prima dva argumenta, x i y, i vraća poređenje između njih koristeći ugrađenu funkciju cmp().>>> a = [10, 'number', 11.2]
>>> a.sort(lambda x,y: cmp(x.__class__.__name__, y.__class__.__name__))
>>> print(a)
[11.2, 10, 'number']</s>

<s>Closure 
Closure funkcije su funkcije koje imaju vrednost u okruženju koje sadrži 'bound' promenljive.</s>

<s>Sledeći primer povezuje promenljivu "threshold" sa anonimnom funkcijom koja poredi ulaz sa njom.def comp(threshold):
    return lambda x: x < thresholdOvo može služiti kao generator funkcija poređenja.>>> func_a = comp(10)
>>> func_b = comp(20)</s>

<s>>>> print func_a(5), func_a(8), func_a(13), func_a(21)
True True False False</s>

<s>>>> print func_b(5), func_b(8), func_b(13), func_b(21)
True True True FalseBilo bi nepraktično kreirati funkciju za svaku funkciju poređenja i može biti nepraktično čuvati vrednost po kojoj se poredi za dalju upotrebu.</s><s>I pored razloga zašto se closure funkcije koriste, anonimne funkcije su entitet koji sadrži funkcionalnost koja vrši poređenje.</s>

<s>Currying 
Currying je proces promene funkcije da bi bilo potrebno manje ulaznih vrednosti (u ovom slučaju transformacija funkcije koja izvodi deljenje bilo kog celog broja u onu funkciju koja vrši deljenje sa skupom celih brojeva).>>> def divide(x, y):
... return x / y</s>

<s>>>> def divisor(d):
... return lambda x: divide(x, d)</s>

<s>>>> half = divisor(2)
>>> third = divisor(3)</s>

<s>>>> print half(32), third(32)
16 10</s>

<s>>>> print half(40), third(40)
20 13Korišćenje anonimnih funkcija nije česta kod currying tehnike, ali se može koristiti u te svrhe.</s><s>U primeru iznad, funkcija divisor generiše funkciju sa konkretnim deliteljem.</s><s>Funkcija half i third izvodi funkciju divide sa fiksiranim deliteljem.</s>

<s>Funkcija divisor takođe primenjuje clousure tehniku tako što vezuje promenljivu "d".</s>

<s>Funkcije višeg reda 
Python 2.x sadrži nekoliko funkcija koje primaju anonimne funkcije kao argument.</s><s>Ovaj odeljak opisuje njih.</s>

<s>Map 
Map funkcija vrši poziv funkcije nad svakim elementom liste.</s><s>Sledeći primer kvadrira svaki element u nizu anonimnom funkcijom.>>> a = [1, 2, 3, 4, 5, 6]
>>> print map(lambda x: x*x, a)
[1, 4, 9, 16, 25, 36]Anonimna funkcija prima argument i množi ga sobom (kvadrira ga).</s><s>Po mišljenju kreatora jezika, forma iznad nije preporučljiva, vec predlažu sledeću formu sa istim značenjem a bolje se uklapa sa namenom jezika:>>> a = [1, 2, 3, 4, 5, 6]
>>> print [x*x for x in a]
[1, 4, 9, 16, 25, 36]</s>

<s>Filter 
Filter funkcija vraća sve elemente liste koje imaju vrednost True kad ih prosledimo određenoj funkciji.>>> a = [1, 2, 3, 4, 5, 6]
>>> print filter(lambda x: x % 2 == 0, a)
[2, 4, 6]Anonimna funkcija proverava da li je prosleđeni argument paran.</s><s>Isto kao u slučaju sa mapom, kod ispod je preporučljiviji.>>> a = [1, 2, 3, 4, 5, 6]
>>> print [x for x in a if x % 2 == 0]
[2, 4, 6]</s>

<s>Fold 
Fold/reduce funkcija prolazi kroz sve elemente liste (obično s leva na desno), i nagomilava vrednost pri tom prolasku.</s><s>Česta upotreba ovoga je kombinovanje elemenata liste u jednu vrednost.</s><s>Na primer:>>> a = [1, 2, 3, 4, 5]
>>> print reduce(lambda x,y: x*y, a)
120Ovo izvršava sledeće:</s>

<s>Anonimna funkcija ovde je množenje dva argumenta.</s>

<s>Rezultat fold funkcije mora biti jedna vrednost.</s><s>Umesto toga, i map i filter mogu biti kreirani korišćenjem fold funkcije.</s><s>U mapi, vrednost koja je nagomilana je zapravo nova lista koja sadrži rezultate primene funkcije na svaki element originalne liste.</s><s>U filter funkciji, vrednost koja je nagomilana je nova lista koja sadrži samo one elemente koji ispunjavaju određen uslov.</s>

<s>Spisak jezika 
Sledeća lista programskih jezika neimenovane anonimne funkcije podrzava u potpunosti, delom, ili ne podržava.</s>

<s>Ova tabela ukazuje ne neke opšte trendove.</s><s>Jezici koji ne podržavaju anonimne funkcije(C, Pascal, Object Pascal) su konvencijalni strogo tipizirani jezici.</s><s>Medjutim, strogo tipizirani jezici mogu podržavati anonimne funkcije.</s><s>Na primer, ML jezici su strogo tipizirani i sadrže anonimne funkcije, i Delphi, kao dijalekt objektnog Pascal-a je nadograđen tako da podržava anonimne funkcije.</s><s>Takođe, jezici koji tretiraju funkcije kao 'funkcije prvog reda'(Dylan, Haskell, JavaScript,Lisp,ML, Perl,Python, Ruby,Scheme) sadrže anonimne funkcije tako da mogu biti definisane i prosleđene jednostavno kao i tipovi podataka.</s><s>Međutim, novi C++11 standard ih dodaje C++-u iako je konvencijalan, strogo tipiziran jezik.</s>

<s>Reference</s>

<s>Literatura</s>

<s>Programiranje</s>

