Lavorare con i flag in JavaScript

Ora impareremo a lavorare con i flag. Un flag è una variabile speciale che può assumere solo due valori: true e false. Con l'aiuto dei flag è possibile risolvere problemi che verificano l'assenza di qualcosa: ad esempio, si può verificare che in un array non ci sia un elemento con un valore specifico. Iniziamo.

Risolviamo il seguente problema: dato un array di numeri, dobbiamo verificare se contiene un elemento con valore 3 o meno. Se presente, stampiamo '+++', se assente - stampiamo '---'.

Per iniziare, proviamo a stampare '+++'. Per farlo, iteriamo attraverso tutti gli elementi del nostro array e con un if chiederemo - l'elemento corrente è uguale al valore 3? Se è uguale, stampiamo '+++':

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

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

Ma la nostra soluzione non è ottimale: se nell'array non ci fosse un solo valore 3, ma diversi, allora '+++' verrebbe stampato diverse volte. Modifichiamo il nostro array (mettiamo due elementi con valore 3) e verifichiamolo:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // stamperà più volte
  }
}

Risolviamo il problema: interrompiamo il ciclo con break, se l'elemento è già stato trovato:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++');
    break;  // interrompiamo il ciclo
  }
}

Ora proviamo a fare in modo che, se nell'array non ci sono affatto elementi con valore 3, venga stampato '---'. Un errore comune sarebbe aggiungere else al nostro if - in questo caso '---' verrebbe stampato per tutti gli elementi che non sono 3:

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

for (let elem of arr) {
  if (elem == 3) {
    console.log('+++'); // stamperà per l'elemento 3
  } else {
    console.log('---'); // stamperà per gli elementi 1, 2, 4, 5
  }
}

Quindi, l'idea di aggiungere else è una cattiva idea, non funziona. Per risolvere problemi di questo tipo (problemi abbastanza frequenti) si utilizzano i cosiddetti flag.

Come accennato in precedenza, un flag è una variabile che può assumere due valori: true o false.

Quindi, creiamo una variabile flag con questo significato: se è uguale a true, allora l'array contiene l'elemento 3, mentre se è false, allora tale elemento non è presente.

Inizialmente impostiamo la variabile flag a false - cioè assumeremo che l'elemento 3 non sia presente nell'array:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // assumiamo che l'elemento 3 non sia nell'array

Poi eseguiamo un ciclo con un if come facevamo prima. Se il ciclo rileva che nell'array c'è un elemento 3 - allora imposteremo la variabile flag a true e usciremo dal ciclo con break:

javascriptlet arr = [1, 2, 3, 4, 5];
let flag = false; // assumiamo che l'elemento 3 non sia nell'array

for (let elem of arr) {
  if (elem == 3) {
    flag = true; // l'elemento c'è - ridefiniamo la variabile flag
    break; // usciamo dal ciclo
  }
}

La risposta alla domanda se nell'array c'è 3 o meno, possiamo darla solo dopo il ciclo. E questa risposta la abbiamo già: dopo il ciclo la variabile flag potrebbe essere rimasta false o potrebbe aver cambiato il suo valore in true, se il ciclo ha rilevato 3 nell'array:

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

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

// qui la variabile flag è uguale a true o false

Ora, dopo il ciclo, possiamo fare un if che controllerà la variabile flag e stamperà a schermo '+++' o '---':

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

Dato un array:

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

Verifica se in questo array c'è un elemento 'c'. Se c'è - stampa '+++', se non c'è - stampa '---'.

Задание 2

Scrivi del codice che verifichi se un numero è primo o meno. Un numero primo è divisibile solo per uno e per se stesso, e non è divisibile per altri numeri.