TOC

This article has been localized into Italian by the community.

Strutture di controllo:

La dichiarazione switch

La dichiarazione switch è come una serie di dichiarazioni if, tutte controllando la stessa variabile, ma con una azione differente per ciascun possibile valore. Potrebbe suonare complicato, ma in realtà non lo è. Osserva questo semplice esempio:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;	
}

Nella prima linea, noi facciamo una domanda. Dopo usiamo la variabile risposta come la condizione per la dichiarazione switch. Dentro la dichiarazione switch, noi definiamo valori multipli per verificare la variabile answer (si, no o magari), usando la parola chiave case. Ciascun azione avrà un risultato in una allerta differente.

La parola chiave break

Nota che la parola chiave break viene usata alla fine di ciascun case. Una dichiarazione switch richiede che tu esca in maniera appropriata da ciascun caso, usando la parola chiave break, o in caso tu ti trovi dentro una funzione, usando la parola chiave return per uscire completamente dalla funzione. Se tu ometti questo, l'esecuzione cadrà dentro tutti i casi che si trovano sotto a quello del caso corrispondente. Tu puoi testare questo semplicemente rimuovendo la parola chiave break dall'esempio che si trova sopra ed eseguendo questo di nuovo.

Tu puoi omettere l'ultima parola chiave break, poiché l'istruzione switch termina lì non importa cosa, ma questo non è vero per tutti i linguaggi di programmazione, allora per consistenza, alcuni programmatori tendono ad includere sempre questo per tutti i casi.

Gruppi case

Avvolte hai bisogno di diversi casi per eseguire la stessa azione. Senza nessun problema, perché puoi semplicemente impilare quante più istruzioni case possibili una sopra l'altra, per permettere che queste usino lo stesso codice. Ecco un esempio:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
	case "nope":	
	case "nay":
	case "nix":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;	
}

Come puoi vedere, noi adesso abbiamo una intera lista di opzioni per la parte "no" della dichiarazione switch, con diverse variazioni per questa risposta negativa risultando nello stesso messaggio.

La parola chiave default

L'esempio di sopra ha un difetto ovvio: Se l'utente non entra un valore esatto che corrisponda ad uno dei casi, non succederà niente. Per una situazione come questa, è bello avere una azione su cui ricadere - qualcosa che verrà eseguito se nessuna delle altre opzioni sono rilevanti. Fortunatamente per noi, JavaScript ci permette di fare questo, usando la parola chiave default. Ecco una versione modificata dell'esempio di sopra dove aggiungiamo questo:

let answer = prompt("Do you like JavaScript?");
switch(answer)
{
	case "yes":
		alert("That's great!");
		break;
	case "no":
		alert("Sorry to hear that!");
		break;
	case "maybe":
		alert("I'll ask again later...");
		break;
	default:
		alert("Please enter 'yes', 'no' or 'maybe'...");
		break;
}

Con questo, la nostra dichiarazione switch può gestire tutte le situazioni, perché abbiamo una azione su cui ricadere dalla parola chiave default.

Compazione case

Un'altra cosa che dobbiamo considerare, se l'esempio di sopra viene usato nel mondo reale, è come ciascun case è paragonato alla condizione. Per esempio, noi verifichiamo "yes", ma le stringhe sono sempre case-sensitive, allora se l'utente scrive "Yes", "YeS" o "YES", il nostro caso non corrisponderà. Noi dobbiamo sempre gestire questo, per esempio trasformando la risposta in minuscolo prima di verificarla:

let answer = prompt("Do you like JavaScript?");
switch(answer.toLowerCase())
{
	case "yes":
		alert("That's great!");
		break;
...

Un'altra cosa che devi tenere in considerazione è il fatto che tutti i paragoni sono fatti usando l'operatore di confronto di uguaglianza rigorosa. Questo significa che se la tua espressione nella dichiarazione switch è una stringa, solo puoi paragonarla con un'altra stringa, anche se sai che quella stringa di fatto è un numero.

Permettimi di illustrartelo con un esempio:

let answer = prompt("41 or 42?");
switch(answer)
{
	case 41:
		alert("41? Really??");
		break;
	case 42:
		alert("42 - of course!");
		break;
	default:
		alert("Unknown answer...");
		break;
}

Questo esempio NON funzionerà come aspettato. Perche? perche il risultato di prompt() è una stringa di testo (anche se l'utente inserisce un valore numerico), ma noi li paragoniamo con numeri (41 o 42). Tu devi gestire questo, per esempio trasformando answer in un valore numerico prima di controllarlo, o paragonandolo con una stringa. Andiamo a cambiare la prima linea dell'esempio e usiamo la funzione Number() per trasformare il risultato della funzione prompt() in un numero:

let answer = Number(prompt("41 or 42?"));
switch(answer)
{
	case 41:
		alert("41? Really??");
		break;
	case 42:
		alert("42 - of course!");
		break;
	default:
		alert("Unknown answer...");
		break;
}

Riassunto

Con la dichiarazione switch, tu puoi paragonare una espressione con diverse opzioni e performare una azione basato su questo, come una serie di dichiarazioni if..else..if, ma in un formato più leggibile. Ricorda che la dichiarazione switch usa l'operatore di uguaglianza rigoroso.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!