Continue-käsky JavaScriptissä
On olemassa myös continue-käsky,
joka käynnistää silmukan uuden iteraation. Tämä
käsky voi joskus olla hyödyllinen koodin
yksinkertaistamiseen, vaikka käytännössä tehtävän
voi melkein aina ratkaista myös ilman sitä. Katsotaan
käytännön esimerkkiä.
Olkoon meillä taulukko numeroita. Käydään
se läpi silmukalla ja numerot, jotka ovat jaollisia
2:lla, korotetaan neliöön ja tulostetaan
konsoliin, ja numerot, jotka ovat jaollisia 3:lla,
korotetaan kuutioon ja tulostetaan konsoliin. Tässä on kuvatun
tehtävän ratkaisu:
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);
}
}
Kuten näet, rivi console.log(result)
toistuu kahdesti. Siirretään se
if:n ulkopuolelle, näin:
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); // siirretty tulostuksen ehdon ulkopuolelle
}
Nyt skriptimme kuitenkin toimii hieman
eritavalla: käy niin, että myös tavallisille alkioille,
joidka käsittely ei käynyt läpi if:mme,
suoritetaan muuttujan result
tulostus konsoliin, mikä tehtävämme ehtojen mukaan
ei ole tarpeen.
Korjataan ongelma lisäämällä if:llemme
toinen ehto else, joka suoritetaan
alkioille, jotka eivät ole jaollisia 2:lla
ja 3:lla, ja kutsutaan siellä continue-käskyä,
joka heti siirtää meidät
silmukan seuraavalle iteraatiolle:
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; // siirrytään silmukan seuraavalle iteraatiolle
}
console.log(result); // suoritetaan, jos jaollinen 2:lla tai 3:lla
}
Kirjoita silmukka, joka tulostaa vain
parilliset numerot 1:stä 100:aan,
ohittaen parittomat käyttämällä continue:a.