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
'+++':
let 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:
let 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:
let 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:
let 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:
let 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:
let 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:
let 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 '---':
let 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('---');
}
Dana jest tablica:
let arr = ['a', 'b', 'c', 'd', 'e'];
Sprawdź, czy w tej tablicy znajduje się element
'c'. Jeśli tak - wypisz '+++',
a jeśli nie - wypisz '---'.
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.