C sharp/Strutture di controllo

Indice del libro

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

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

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

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

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

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

Le strutture iterative sono quelle di looping, ovvero ripetizione fino a che non si verifichi qualcosa che interrompe il ciclo.

Ciclo while

modifica
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

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

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.