C sharp/Strutture di controllo
In questo capitolo verranno trattate le strutture di controllo (o istruzioni di flusso) che, tramite una particolare sintassi, permettono di modificare la normale struttura sequenziale del programma. Il C# eredita grosso modo le sue strutture di controllo dal C. Esse comprendono:
Strutture alternative
[modifica | modifica sorgente]Le strutture di selezione binaria comportano l'esecuzione di una o più operazioni se una data condizione è vera ed eventualmente un'altra serie di operazioni nel caso tale condizione sia falsa.
If - else if - else
[modifica | modifica sorgente]Nel C sharp, la selezione binaria è rappresentata dal blocco if (se):
if (condizione)
istruzione A;
else
istruzione B;
Se si vuole fare eseguire al programma un'istruzione anche nel caso la condizione sia falsa, si aggiunge il blocco else (altrimenti) seguito dall'istruzione da eseguire.
Il programma verifica la condizione contenuta tra parentesi e, se è vera, esegue l'istruzione A; se la condizione risulta falsa, invece, esegue l'istruzione B.
Una condizione è solitamente il risultato di una espressione in cui compaiono operatori logici o relazionali o che comunque restituiscono un valore booleano. Ad esempio:
int num;
num = int.Parse(System.Console.ReadLine()) //legge un valore da tastiera e lo converte in un numero intero
if (num >= 0)
System.Console.WriteLine(num + " è un numero positivo");
else
System.Console.WriteLine(num + " è un numero negativo");
Se le istruzioni sono più di una, si racchiudono tra parentesi graffe:
if (condizione)
{
istruzione 1;
istruzione 2;
//...
istruzione n;
}
else
{
istruzione 1;
istruzione 2;
//...
istruzione n;
}
È possibile fare gestire al programma condizioni multiple utilizzando la sintassi seguente:
if (condizione 1)
{
//Istruzioni A
}
else if (condizione 2)
{
//Istruzioni B
}
else if (condizione 3)
{
//Istruzioni C
}
else
{
//Istruzioni D
}
Il programma verifica la condizione 1. Se è vera esegue le istruzioni A e esce dalla struttura di controllo, se è falsa passa a verificare la condizione 2 (else if, altrimenti se), e così via. Se nessuna delle condizioni indicate risulta essere vera, il programma esegue le istruzioni che seguono la dichiarazione else.
Le condizioni vengono quindi verificate nell'ordine in cui sono scritte e, una volta incontrata una condizione vera, le altre, anche se vere, vengono ignorate.
Se si vuole che tutte le condizioni vengano verificate, occorre utilizzare blocchi if separati.
switch - case
[modifica | modifica sorgente]L'istruzione switch è una forma compatta della struttura di selezione alternativa, che, dopo aver valutato un'espressione, esegue il codice contenuto in seguito all'etichetta case che specifica il risultato ottenuto.
Sintassi
[modifica | modifica sorgente]La sintassi è la seguente:
switch (espressione)
{
case 1:
//Istruzioni
break;
case 2:
//Istruzioni
break;
case n:
//Istruzioni
break;
...
default:
//Istruzioni
break;
}
Spiegazione del codice
[modifica | modifica sorgente]Nella parentesi seguente la parola chiave switch è indicata un'espressione da valutare, che può essere una variabile, un'operazione aritmetica o logica.
Il programma confronta il risultato dell'espressione con i valori indicati nelle varie etichette case presenti nel blocco di parentesi graffe e il controllo viene trasferito all'istruzione case che corrisponde al valore dello switch, fino al raggiungimento di un'istruzione break che segna l'uscita dal blocco switch. È necessario inserire l'istruzione break al termine di ogni blocco case.
Se non esiste etichetta case corrispondente al risultato dell'espressione, il programma eseguirà le istruzioni contenute nel blocco default, se questo è presente, altrimenti uscirà dal blocco switch.
Strutture iterative
[modifica | modifica sorgente]Le strutture iterative sono quelle di looping, ovvero ripetizione fino a che non si verifichi qualcosa che interrompe il ciclo.
Ciclo while
[modifica | modifica sorgente]while(espressione)
{
//istruzioni
}
Espressione è una condizione booleana, ovvero può essere o vera, o false. Se vera, il blocco istruzioni sarà eseguito, altrimenti no.
La differenza tra while e if sta nel fatto che if (se l'espressione è vera) esegue solo una volta, mentre while esegue il blocco finché la condizione non diventerà falsa.
Ciclo for
[modifica | modifica sorgente]Il ciclo for viene usato per ripetere un blocco di istruzioni un numero di n volte, prestabilite. Sintassi:
for (int i=0; i<10; i++)
{
//istruzioni
}
Osserviamo che è della forma for (istruzione; espressione; istruzione). Quindi nei campi istruzione possiamo mettere qualsiasivoglia istruzione, ma deve sempre essere presente l'espressione booleana.
Iterazione basata su collezioni (foreach)
[modifica | modifica sorgente]L'istruzione foreach (letteralmente: per ciascun elemento) è un'istruzione tipica del linguaggio C#, e molto recente. Essa sarebbe un'alternativa più veloce ed elegante al ciclo for. È stata pensata come un supporto veloce per i cicli che scansionano un array, per esempio.
L'esempio che segue scansiona gli elementi di un array strighe
di stringhe e li stampa su schermo, uno per uno:
foreach(String s in stringhe)
{
System.Console.WriteLine(s);
}
Abbiamo definito una stringa s
che serve come appoggio per le stringhe contenute nell'array.