Funzione anonima

Da Wikipedia, l'enciclopedia libera.

In programmazione informatica, una funzione anonima o funzione lambda è una funzione definita, e possibilimente chiamata, senza essere legata ad un identificatore. Le funzioni anonime sono utili per passare come argomento una funzione di ordine superiore e si trovano in linguaggi che supportato funzioni di prima classe come Haskell.

Le funzioni anonime sono una forma di funzione annidata, nella quale è permesso l'accesso alla variabile nello scopo della funzione contenente (variabili non locali). Benché siano nominate come funzioni annidate, non possono essere ricorsive senza l'aiuto di un operatore fixed-point combinator (funzione di ordine superiore) che in questo caso viene chiamato fixpoint anonimo o ricorsione anonima.

Queste funzioni anonime nascono dal lavoro di Alonzo Church sul Lambda calcolo del 1936. In molti linguaggi di programmazione le funzioni anonime sono introdotte con la parola chiave lambda ed è per questo che ci si riferisce ad esse come funzioni lambda.

Già nel 1958, Lisp aveva funzioni anonime. Oggi si trovano in Javascript, Ruby, Python, PHP, C++, Perl, Visual Basic, Delphi...

Supporto nei vari linguaggi[modifica | modifica wikitesto]

Python[modifica | modifica wikitesto]

Python supporta funzioni anonime semplici attraverso la forma lambda. Il corpo d'esecuzione della lambda deve essere una espressione e non una dichiarazione, e quindi questa è una restrizione alla sua utilità. Il valore ritornato dalla lambda è il valore contenuto nell'espressione.

foo = lambda x: x*x
print(foo(10))

Ruby[modifica | modifica wikitesto]

Ruby supporta le funzioni anonime usando una strutta sintattica chiamata block. Quando è passata a un metodo, un blocco è convertito in un oggetto di classe Proc in alcune circostanze.

# Example 1:
# Purely anonymous functions using blocks.
ex = [16.2, 24.1, 48.3, 32.4, 8.5]
ex.sort_by { |x| x - x.to_i } # sort by fractional part, ignoring integer part.
# [24.1, 16.2, 48.3, 32.4, 8.5]
 
# Example 2:
# First-class functions as an explicit object of Proc -
ex = Proc.new { puts "Hello, world!" }
ex.call # Hello, world!
 
# Example 3:
# Function that returns lambda function object with parameters
def is_multiple_of(n)
    lambda{|x| x % n == 0}
end
multiple_four = is_multiple_of(4)
multiple_four.call(16)
#true
multiple_four[15]
#false

Javascript[modifica | modifica wikitesto]

Javascript supporta le funzioni anonime con la possibilità di definirle per l'esecuzione immediata (runtime). Questa modalità è ampiamente sfruttata in librerie runtime quali JQuery.

// Define and execute immediately
(function() {
     alert("Hello World!");
   })();

Voci correlate[modifica | modifica wikitesto]