Praca z flagami w JavaScript

Teraz nauczymy się pracować z flagami. Flaga to specjalna zmienna, która może przyjmować tylko dwie wartości: true i false. Za pomocą flag można rozwiązywać zadania sprawdzające brak czegoś: na przykład można sprawdzić, czy w tablicy nie ma elementu o określonej wartości. Zaczynajmy.

Rozwiążmy następujące zadanie: dana jest tablica z liczbami, należy sprawdzić, czy znajduje się w niej element o wartości 3, czy nie. Jeśli tak - wypiszemy '+++', jeśli nie - wypiszemy '---'.

Na początek spróbujmy wypisać '+++'. Aby to zrobić, przeiterujemy po wszystkich elementach naszej tablicy i za pomocą instrukcji if będziemy pytać - czy bieżący element jest równy wartości 3. Jeśli tak - wypiszemy '+++':

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

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

Ale nasze rozwiązanie nie jest najlepsze: bo jeśli w tablicy będzie nie jedna wartość 3, a kilka, to '+++' wypisze się kilka razy. Zmodyfikujmy naszą tablicę (stwórzmy dwa elementy o wartości 3) i przekonajmy się o tym:

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

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

Poprawmy problem: przerwijmy pętlę za pomocą break, jeśli element już został znaleziony:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // przerywamy pętlę
  }
}

Spróbujmy teraz zrobić tak, aby, jeśli w tablicy w ogóle nie ma elementów o wartości 3, wypisywało się '---'. Powszechnym błędem będzie dodanie else do naszej instrukcji if - w tym przypadku '---' będzie wypisywane dla wszystkich elementów, które nie są równe 3:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // wypisze dla elementu 3
  } else {
    console.log('---'); // wypisze dla elementów 1, 2, 4, 5
  }
}

A zatem, pomysł z dodaniem else - jest złym pomysłem, nie działającym. Do rozwiązywania zadań tego typu (takie zadania spotyka się dość często) używa się tak zwanych flag.

Jak już wspomniano wyżej, flaga - to taka zmienna, która może przyjmować dwie wartości: true lub false.

A zatem, stwórzmy zmienną flag o takim znaczeniu: jeśli jest równa true, to w tablicy znajduje się element 3, a jeśli false, to takiego elementu nie ma.

Początkowo ustawmy zmienną flag na wartość false - to znaczy będziemy zakładać, że elementu 3 nie ma w tablicy:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // zakładamy, że elementu 3 nie ma w tablicy

Następnie uruchomimy pętlę z instrukcją if tak, jak robiliśmy to wcześniej. Jeśli pętla wykryje, że w tablicy znajduje się element 3 - to ustawimy zmienną flag na wartość true i wyjdziemy z pętli za pomocą break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // zakładamy, że elementu 3 nie ma w tablicy

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // element jest - przedefiniujemy zmienną flag
    break; // wychodzimy z pętli
  }
}

Odpowiedź na pytanie, czy w tablicy jest 3 czy nie, możemy dać dopiero po pętli. I tę odpowiedź już mamy: po pętli zmienna flag mogła pozostać false lub mogła zmienić swoją wartość na true, jeśli pętla wykryła w tablicy 3:

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

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

// tutaj zmienna flag jest równa albo true, albo false

Teraz po pętli możemy zrobić instrukcję if, która spojrzy na zmienną flag i wypisze na ekran '+++' lub '---':

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

Dana jest tablica:

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

Sprawdź, czy w tej tablicy znajduje się element 'c'. Jeśli tak - wypisz '+++', a jeśli nie - wypisz '---'.

Задание 2

Napisz kod, który będzie sprawdzał, czy liczba jest pierwsza, czy nie. Liczba pierwsza dzieli się tylko przez jeden i przez samą siebie, i nie dzieli się przez inne liczby.