Lippujen käsittely JavaScriptissä

Nyt opimme käsittelemään lippuja. Lippu on erityinen muuttuja, joka voi saada vain kaksi arvoa: true ja false. Lippuja käyttämällä voidaan ratkaista tehtäviä, jotka tarkistavat jonkin puuttumista: esimerkiksi voidaan tarkistaa, että taulukossa ei ole alkiota tietyllä arvolla. Aloitetaan.

Ratkaistaan seuraava tehtävä: annettu taulukko luvuilla, on tarpeen tarkistaa, onko siinä alkio arvolla 3 vai ei. Jos on, tulostetaan '+++', jos ei - tulostetaan '---'.

Aluksi yritetään tulostaa '+++'. Tätä varten käymme läpi kaikki taulukkomme alkiot ja if-lauseella kysymme - onko nykyinen alkio yhtä suuri kuin arvo 3. Jos on, tulostetaan '+++':

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
  }
}

Mutta ratkaisumme ei ole kovin hyvä: sillä jos taulukossa on useita arvoja 3, niin '+++' tulostuu useita kertoja. Muutetaan taulukkoamme (tehdään kaksi alkiota arvolla 3) ja varmistutaan tästä:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // tulostaa useita kertoja
  }
}

Korjataan ongelma: keskeytetään silmukka break:llä, jos alkio on jo löytynyt:

javascriptlet arr = [1, 2, 3, 4, 3, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // keskeytetään silmukka
  }
}

Yritetään nyt tehdä niin, että jos taulukossa ei ole lainkaan alkioita arvolla 3, tulostuisi '---'. Yleinen väärinkäsitys on lisätä else if-lauseeseemme - tässä tapauksessa '---' tulostuu kaikille alkioille, jotka eivät ole 3:

javascriptlet arr = [1, 2, 3, 4, 5];

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // tulostuu alkiolla 3
  } else {
    console.log('---'); // tulostuu alkioilla 1, 2, 4, 5
  }
}

Siis, idea lisätä else - huono idea, ei toimi. Tämän tyyppisten tehtävien ratkaisemiseen (tällaisia tehtäviä esiintyy tarpeeksi usein) käytetään niin kutsuttuja lippuja.

Kuten edellä mainittiin, lippu on sellainen muuttuja, joka voi saada kaksi arvoa: true tai false.

Tehdään muuttuja flag seuraavalla arvolla: jos se on yhtä suuri kuin true, niin taulukossa on alkio 3, ja jos false, niin sellaista alkiota ei ole.

Aluksi asetetaan muuttuja flag arvoon false - eli oletetaan, että alkiota 3 ei ole taulukossa:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // oletetaan, että alkiota 3 ei ole taulukossa

Sitten käynnistetään silmukka if-lauseella kuten teimme aiemmin. Jos silmukka huomaa, että taulukossa on alkio 3 - niin asetetaan muuttuja flag arvoon true ja poistutaan silmukasta break:llä:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // oletetaan, että alkiota 3 ei ole taulukossa

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // alkio on olemassa - määritellään muuttuja flag uudelleen
    break; // poistutaan silmukasta
  }
}

Vastauksen kysymykseen, onko taulukossa 3 vai ei, voimme antaa vasta silmukan jälkeen. Ja tämä vastaus meillä on jo: silmukan jälkeen muuttuja flag on voinut pysyä false tai vaihtaa arvonsa true:ksi, jos silmukka havaitsi taulukossa 3:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false;

for (let elem of arr) {
  if (elem == 3) {
    flag = true;
    break;
  }
}

// tässä muuttuja flag on joko true tai false

Nyt silmukan jälkeen voimme tehdä if-lauseen, joka katsoo muuttujaan flag ja tulostaa näytölle '+++' tai '---':

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false;

for (let elem of arr) {
  if (elem == 3) {
    flag = true;
    break;
  }
}

if (flag === true) {
  console.log('+++');
} else {
  console.log('---');
}
Задание 1

Annettu taulukko:

javascriptlet arr = ['a', 'b', 'c', 'd', 'e'];

Tarkista, onko tässä taulukossa alkio 'c'. Jos on - tulosta '+++', ja jos ei - tulosta '---'.

Задание 2

Kirjoita koodi, joka tarkistaa onko luku alkuluku vai ei. Alkuluku on jaollinen vain ykkösellä ja itsellään, eikä ole jaollinen muilla luvuilla.