Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.
let
e l'assegnazione destrutturante. Inoltre include tutte le funzionalità di JavaScript 1.6.
Il supporto a JavaScript 1.7 è disponibile a partire da Firefox 2 Beta 1.
Gli esempi di codice riportati in questo articolo possono essere sperimentati con la shell di JavaScript. Si veda Introduzione alla shell di JavaScript.
Usare JavaScript 1.7
Per poter usare alcune delle nuove funzionalità, occorre specificare che si intende usare JavaScript 1.7. Nel codice HTML o XUL, si inserisca:
<script type="application/javascript;version=1.7"/>
Quando si utilizza la shell di JavaScript, occorre impostare la versione di JavaScript che si intende usare tramite la funzione version()
:
version(170);
Per usare le funzionalità che richiedono l'uso delle nuove parole chiave yield
e let
bisogna specificare che si sta usando la versione 1.7 perchè il codice scritto per le vecchie versioni potrebbe utilizzare quelle parole come nome di variabile o come nome di funzione. Le funzionalità che non richiedono l'utilizzo di nuove parole chiave (funzionalità riguardanti gli array e l'assegnamento destrutturante) possono essere usate senza specificare la versione di JavaScript.
Generatori e iteratori
Quando si sviluppa del codice che comprende un algoritmo iterativo (come l'iterazione su una lista o calcoli che si ripetono su un insieme di dati), vi sono spesso variabili di stato i cui valori devono essere mantenuti per tutta la durata del ciclo. Tradizionalmente, si utilizza una funzione di callback per ottenere i valori intermedi di un algoritmo iterativo.
Generatori
Si consideri il programma che calcola i numeri di Fibonacci:
function do_callback(num) { document.write(num + "<BR>\n"); } function fib() { var i = 0, j = 1, n = 0; while (n < 10) { do_callback(i); var t = i; i = j; j += t; n++; } } fib();
Questo codice utilizza una routine di callback per effettuare operazioni ad ogni passo dell'iterazione. In questo caso, ogni numero di Fibonacci è semplicemente scritto sulla console.
I generatori e gli iteratori lavorano insieme per fornire un metodo nuovo e migliore per fare questo. Vediamo come scrivere la stessa routine utilizzando un generatore:
function fib() { var i = 0, j = 1; while (true) { yield i; var t = i; i = j; j += t; } } var g = fib(); for (var i = 0; i < 10; i++) { document.write(g.next() + "<BR>\n"); }
La funzione contenente la parola chiave yield
è un generatore. Quando viene chiamata i suoi parametri formali sono legati agli argomenti attuali, ma il corpo non viene realmente eseguito. Invece, viene restituito un generatore-iteratore. Ogni chiamata al metodo next()
del generatore-iteratore effettua un nuovo ciclo. Il valore di ogni ciclo è il valore specificato dalla parola chiave yield
. Si può pensare a yield
come alla versione per generatori-iteratori di yield
. Ogni volta che si chiama next()
, il codice del generatore riprende dall'istruzione che segue la parola chiave yield
.
Il ciclo di un generatore-iteratore si esegue quindi chiamando ripetutamente il suo metodo next()
, associandolo alla condizione desiderata. In questo esempio, possiamo ottenere tutti i numeri di Fibonacci che vogliamo chiamando g.next()
fino a quando abbiamo il numero di risultati che desideriamo.