Ho letto la guida rapida alla programmazione in iBooks. Qualcuno potrebbe spiegarmi qual è la differenza tra una funzione e una chiusura. È solo che non ha nome e può essere usato nelle espressioni?Qual è la differenza tra funzioni e chiusure?
risposta
Le funzioni, infatti, sono solo chiamate chiusure. Di seguito sono almeno concettualmente equivalenti:
let foo = { println("hello") }
func foo()->(){ println("hello") }
Questo diventa un po 'più complicato nel caso di utilizzo func
dichiarare metodi, come c'è qualche pezzo interessante di zucchero aggiunto riguardo l'inserimento automatico di parametri denominati pubblici, ecc func myMethod(foo:Int, bar:Int, baz:Int)
diventa func myMethod(foo:Int, #bar:Int, #baz:Int)
, ad esempio.
Ma è pur sempre vero che anche i metodi sono solo un caso specifico di chiusure, e se è vero per le chiusure, vale anche per le funzioni e i metodi.
In primo luogo, cominciamo con definition of Closure, come si trova in Wikipedia:
Nei linguaggi di programmazione, una chiusura (anche la chiusura lessicale o di una funzione chiusura) è una funzione o un riferimento a una funzione insieme ad un riferimento ambiente: una tabella che memorizza un riferimento a ciascuna delle variabili non locali (chiamate anche variabili libere o valori di incremento) di tale funzione .
Chiusura è il termine che viene utilizzato per fare riferimento a una funzione insieme alle variabili dal suo ambiente che "chiude".
La definizione di chiusura a Swift è in linea con lambda e blocchi in altri linguaggi come C# e Ruby.
quanto riguarda la differenza di funzioni, dalle Swift documentation:
funzioni globali e nidificate, come introdotto nelle funzioni, sono in realtà casi particolari di chiusure
Così tutte le funzioni sono chiusure essenzialmente che memorizza riferimenti a variabili nel loro contesto.
Closure expressions
sono un modo conveniente di scrivere chiusure e fornisce una sintassi più concisa.
Fondamentalmente come 'function() {...}' in JS? – Jehan
Quasi. In javascript, le chiusure sono funzioni anonime. In Swift, le funzioni sono chiamate chiusure. Ma ammetterò liberamente che questa distinzione è per lo più semantica e non molto importante. – jemmons
"In javascript, le chiusure sono funzioni anonime. In Swift, le funzioni sono chiamate chiusure." Queste due definizioni sono equivalenti. Sembra che non ci siano differenze, semantiche o meno. – Will