Istruzione continue in JavaScript
Esiste anche l'istruzione continue,
che avvia una nuova iterazione del ciclo. Questa
istruzione a volte può essere utile per
semplificare il codice, anche se quasi sempre il compito
può essere risolto anche senza di essa. Diamo un'occhiata
a un esempio pratico.
Supponiamo di avere un array di numeri.
Iteriamolo con un ciclo e eleviamo al quadrato i numeri
divisibili per 2 e stampiamoli
in console, mentre i numeri divisibili per 3,
eleviamoli al cubo e stampiamoli in console. Ecco la soluzione
al compito descritto:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let elem of arr) {
let result;
if (elem % 2 === 0) {
result = elem * elem;
console.log(result);
} else if (elem % 3 === 0) {
result = elem * elem * elem;
console.log(result);
}
}
Come puoi vedere, la riga console.log(result)
si ripete due volte. Portiamola fuori
dall'if, in questo modo:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let elem of arr) {
let result;
if (elem % 2 === 0) {
result = elem * elem;
} else if (elem % 3 === 0) {
result = elem * elem * elem;
}
console.log(result); // abbiamo spostato l'output fuori dalla condizione
}
Tuttavia, ora il nostro script funziona in modo leggermente
diverso: succederà che anche per gli elementi ordinari,
non elaborati dal nostro if, verrà
eseguito l'output della variabile result
in console, cosa che in base alle condizioni del nostro compito
non ci serve.
Risolviamo il problema aggiungendo al nostro if
un'ulteriore condizione else, che verrà attivata
per gli elementi non divisibili per 2 e
3, e invochiamo lì l'istruzione continue,
che ci porterà immediatamente
alla nuova iterazione del ciclo:
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (let elem of arr) {
let result;
if (elem % 2 == 0) {
result = elem * elem;
} else if (elem % 3 == 0) {
result = elem * elem * elem;
} else {
continue; // passeremo alla nuova iterazione del ciclo
}
console.log(result); // verrà eseguito se divisibile per 2 o 3
}
Scrivi un ciclo che stampi solo
i numeri pari da 1 a 100,
saltando quelli dispari utilizzando continue.