Novità in JavaScript 1.7
Da MDC.
JavaScript 1.7 è un aggiornamento del linguaggio che include diverse nuove funzionalità, in particolare i generatori, gli iteratori, novità per gli array, le espressioni 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.
[modifica] 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.
[modifica] 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.
[modifica] 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.