1 166 638
contributi
m (Orfanizzo Java (linguaggio)) |
m (tag obsoleti) |
||
Le chiusure sono presenti in quei linguaggi che trattano le [[Funzione (informatica)|funzioni]] come ''oggetti di prima classe'' (''first-class object''), cioè consentono di passarle come parametri ad altre funzioni, restituirle come valori da altre funzioni, assegnarle a variabili, ecc., come si fa con i tipi più semplici, quali ([[Stringa (informatica)|stringhe]], [[Numero intero|interi]], ecc.).
In [[ML programming language|ML]], il seguente codice definisce una funzione <
<source lang=ocaml>
</source>
la struttura dati chiusura che rappresenta <
Poiché in ML il valore di <
Invece se si usa una variabile assegnabile, <
Ad esempio:
<source lang=ocaml>
f(3);
</source>
La prima chiamata di <
Per chiarire il ruolo dell'ambiente lessicale, si consideri il seguente frammento in [[ML programming language|ML]]:
end
</source>
in questo esempio esistono due diverse variabili con lo stesso nome <
La chiusura <
== Utilizzi delle chiusure ==
Alcuni linguaggi orientati agli oggetti permettono al programmatore di usare oggetti che simulano alcune caratteristiche delle chiusure. Per esempio:
* [[Java (linguaggio di programmazione)|Java]] permette al programmatore di definire "[[Classe (informatica)|classi]] anonime" all'interno di un [[Metodo (informatica)|metodo]]; una classe anonima può fare riferimento ai nomi dichiarati nelle classi nelle quali è racchiusa e ai nomi di oggetti di tipo <
<source lang=java>
(Si noti che questo esempio usa degli aspetti del linguaggio disponibili solo a partire dalla [[Java 5|versione 1.5/5.0 di Java]], come i [[Generics Java|generics]], l'[[Java 5#Autoboxing|autoboxing]] e l'[[Java 5#Autoboxing|autounboxing]])
* In [[C++]] e [[D (linguaggio di programmazione)|D]], i programmatori possono definire classi che fanno l'[[Overloading|overload]] dell'operatore <
* Il [[C sharp|C#]] permette ad un ''delegato'' (<
* Nel [[C++11]] è possibile creare una chiusura tramite l'utilizzo di lambda expressions oppure di std::function.
|