Visit Mozilla.org

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.