Due matematici, Jacopini e Bohm, hanno dimostrato che ogni linguaggio di programmazione per essere in grado di implementare ogni tipo di algoritmo deve dare la possibilità di organizzare le istruzioni secondo tre schemi, detti anche strutture:

1) Sequenziale

2) Selettiva

3) Iterativa

 

1) La struttura sequenziale è banale e prevede semplicemente che il flusso delle istruzioni proceda dall’alto verso il basso, in modo sequenziale, appunto, un istruzione dopo l’altra.

 

2) Una struttura selettiva, invece, consiste nel poter creare dei percorsi differenti da intraprendersi al verificarsi di diverse condizioni (in C# ciò si ottiene con le istruzioni if … else).

 

3) La struttura iterativa, o di ripetizione, infine, permette di ripetere delle istruzioni sfruttando la proprietà enumerativa (che si può contare) di una variabile dichiarata internamente per fare da contatore.
In C# e nei principali linguaggi di programmazione esiste un costrutto chiamato ciclo FOR (letteralmente ciclo PER): quindi per una variabile che inizia a contare da un minimo, si esegue una determinata istruzione a ripetizione, controllando prima di ripetere che la variabile non abbia raggiunto un massimo, potendo incrementare la varabile che funziona da contatore di una determinata quantità ad ogni iterazione.

es.

for (int i= 0; i< 10 ; i+= 1)1

{…}

 

diciamo che il ciclo for parte da una variabile i che rappresenta un numero intero, che parte da zero e si fermerà a 9 (i<10), ad ogni iterazione eseguirà l’istruzione sottostante o più istruzioni indicata nel blocco {} ed il for aggiungerà 1 unità alla variabile i, in modo che funzioni da contatore (volendo si può incrementare o diminuire il valore di i a proprio piacimento secondo la necessità di ciò che si vuole rappresentare).

(i += 1 è la stessa cosa che scrivere i = i + 1, è uno degli operatori logici.)

 

Si noti che la variabile l’abbiamo dichiarata all’interno del ciclo for in modo che sia valida solo all’interno di esso ed in tal modo non può interferire con altre variabile del programma. Non potrà quindi nemmeno interferire con la variabile i di un altro ciclo FOR. Volendo si può dichiarare la variabile anche esternamente ma bisognerà fare attenzione al codice per non avere poi comportamenti anomali in caso di altre istruzioni che vanno a modificare la variabile usata come contatore.

 

Il ciclo while

Il ciclo while è un altro costrutto iterativo ed esprime tutta la potenza dei calcolatori elettronici, infatti è possibile in poche righe di codice istruire il processore ad eseguire una moltitudine di calcoli fino a quando una condizione sia vera. Si definisce, infatti, come “struttura iterativa con controllo in testa con uscita per falso”.

 

While (espressione)

{

istruzione1;

istruzione2;

...altre…

}

 

Se volessimo replicare l’esempio fatto precedentemente per il ciclo for con il ciclo while, ciò sarebbe possibile: dovremmo dichiarare e inizializzare una variabile esternamente al ciclo while che funzioni da contatore ed immettere l’istruzione di incremento del contatore fino a quando questo sia inferiore a 10

int conta = 0;

 
while (conta<10)

conta++;

 

 

 

 

Notiamo come in questo caso il compilatore conti esattamente fino a 9 come con l’esempio fatto per il ciclo for, ma notiamo anche che:

  • la scrittura risulta meno compatta,

  • la variabile che funziona da contatore essendo esterna al ciclo può essere modificata anche da altre righe di codice.

 

L’ istruzione break

Si può uscire da un ciclo, for o while (ma anche do e foreach che vedremo in seguito) utilizzando l’istruzione break all’ avverarsi di una determinata condizione.

Basterà inserire una condizione selettiva di if(espressione) seguito dal comando break;

while (conta <= 10)

{

if (conta == 5)

{

break;

}

conta++;

}

 

 

Così facendo il ciclo si chiude a 5, anche se il ciclo while era stato istruito di arrivare fino a 10.

 

Il ciclo do...while

 

Si usa quando si vuole che una linea di comando o più linee vengano eseguite almeno una volta e ripetute poi fino a quando una condizione è vera con il ciclo while.

 

do

{

istruzione1;

istruzione2;

istruzione3

} while (espressione)

In questo caso il controllo non è più in testa come nel ciclo while semplice, ma alla fine. Lo trattiamo per in questo articolo perlo più per chiarezza, ed è importante conoscerlo per capire di cosa si tratta quando si incontra in script scritti da altri, in verità nulla vieterebbe di replicare il funzionamento del ciclo do while, semplicemente scrivendo il comando o i comandi che si vorrebbero eseguire almeno una volta e poi il ciclo while semplice con il controllo in testa.

 

Il comando continue

Se si volesse saltare parte del codice di un ciclo (do, while, for, foreach) all’avverarsi di una determinata condizione si può utilizzare il comando continue; dopo aver specificato quella condizione che si deve avverare con l’espressione selettiva if(espressione)

while (condizione)

{

istruzione1;

if(espressione)

continue;

istruzione2;

istruzione3;

}

 

 

In questo caso il ciclo while esegue sempre l’istruzione1 fino a compimento del ciclo, l’istruzione2 e l’istruzione3 vengono eseguite in tutti i casi tranne quando l’espressione if() è vera, in quel caso il continue fa saltare tutta quella parte di codice che lo segue e dopodiché il ciclo continua.

 

 

 

Il ciclo foreach

 

foreach (var nomevariabiledadichiarare in nomearray)

…

Va a compiere un istruzione o più istruzioni per ogni singola variabile contenuta in un array indicato.

Rispetto al ciclo for è più semplice da impostare ma soprattutto è più sicuro in quanto non si possono commettere errori. Infatti nel ciclo For per inesperienza si potrebbe sbagliare ad indicare il valore di partenza, ovvero che l’indice da utilizzare è 0 e non 1, oppure avere dubbi sulla condizione di terminazione se deve essere uguale o minore uguale, quanti sono gli elementi per impostare quella condizione o sbagliare l’incremento del contatore. Insomma tutti quei dubbi che possono venire a chi è alle prime armi.