Le strutture di controllo decisionali in un programma software

Questo è il post #7 di 12 nella serie “Fondamenti di Programmazione 101

Strutture di Controllo

Se tutto il nostro codice fosse solo eseguito in maniera sequenziale, i nostri programmi farebbero sempre la stessa cosa, a prescindere dai dati che forniremmo.

Noi vogliamo poter decide cosa accade quando certe condizioni si verificano.

Abbiamo già discusso le sequenze in un precedente articolo e adesso è il momento di vedere altri costrutti presenti in virtualmente tutti i linguaggi di programmazione.

Dichiarazione di Selezione (Selection Statements)

Ci sono situazioni quando vogliamo eseguire del codice solo se una data condizione si verifica.

Selezione è la capacità di eseguire una sezione di codice solo se una condizione viene verificata.

Dichiarazioni Condizionali (Conditional Statements)

Una dichiarazione condizionale è una dichiarazione che può risultare vera o falsa.

Abbiamo anche visto, in articoli precedenti nella serie, che dichiarazione condizionali possono essere combinati con operatori logici come AND, OR e NOT per formare dichiarazioni condizionali composte.

Selezione con una dichiarazione IF

Usando dichiarazione di selezione possiamo fare code differenti dipendenti su varie condizioni.

Uno dei modi per usare una selezione è attraverso l’uso della dichiarazione IF, presente praticamente in ogni linguaggio di programmazione.

Una dichiarazione IF è composta da una seconda parte, opzionale. Questa sezione è chiamata else e segna un blocco di codice che sarà eseguito se la condizione valutata nell’ IF è falsa.

Selezione con una dichiarazione switch

Un alternativa, quando abbiamo un opzione fra molteplici opzioni che può essere vera è la dichiarazione switch.

Un altra differenza rispetto allo statement IF è che lo switch statement compara soltanto per egualità.

Una dichiarazione switch inizia definendo la variabile che vogliamo valutare. È una convenzione comune, fra linguaggi di programmazione, di usare la parola chiave switch.

Dichiarazione Switch - Esempio

Nel precedente esempio, in nome variable è semplicemente un placeholder per la variabile attuale con cui vogliamo lavorare. Fra switch e end_swicth abbiamo bisogno di specificare ognuno dei valori con cui vogliamo comprare il valore della variabile variable.

Vediamo un esempio:

Dichiarazione Switch - Esempio 2

Iterazioni con il ciclo FOR

Il ciclo FOR è un particolare tipo di ciclo che viene utilizzato quando, in una maniera o nell’altra, sappiamo in anticipo quante volte dobbiamo iterare.

Possiamo definire il valore della variabile iniziale e questa variabile servirà a capire quando dobbiamo terminare l’iterazione.

Ciclo FOR - Esempio

Qualche volte possiamo avere l’esigenza d’inserire un ciclo for all’interno di un altro ciclo for, questo è chiamato ciclo for nidificato o nested for loop.

Iterazioni con il ciclo WHILE

Il ciclo while opera su una condizione invece di un contatore (come nel ciclo FOR). Fino a quando la condizione è vera, continuerà a ciclare.

Dichiarazione WHILE - Esempio

Iterazioni con il ciclo DO WHILE

Il ciclo do while ha la stessa funzionalità del ciclo while. Il do while opera su una condizione e può essere usata quando non sappiamo in anticipo quante iterazione abbiamo bisogno di fare.

La differenza fra il ciclo while e il do while è che, il ciclo while potrebbe non essere eseguito neanche una volta se la condizione fosse valutata subito come falsa. In contrasto, il ciclo do while è garantito che eseguirà almeno un iterazione. Il motivo è che la valutazione della condizione è spostata dall’inizio del ciclo alla fine.

Dichiarazione DO-WHILE - Esempio

Iteriamo su una sequenza usando il FOR EACH

Quando iteriamo su una sequenza, spesso vogliamo iterare elemento dopo elemento.

Vediamo un esempio:

Dichirazione FOR-EACH - Esempio

Il risultato del precedente snippet di codice sarà:

Ciao Piero
Ciao Paolo
Ciao Giuseppe
Ciao Simone

Ricapitoliamo

Come discusso in questo articolo e nei precedenti, sequenze, selezioni e iterazioni costituiscono i tre pilastri su cui si basano tutti i linguaggi di programmazione.

In questo articolo abbiamo discusso gli ultimi due, selezioni e iterazioni.

Con selezione intendiamo il testare dei valori usando una condizione che può risultare vera o falsa. Se la condizione viene valutata falsa, possiamo consentire al programma di eseguire un dato blocco di codice. Se la condizione, invece, viene valutata falsa allora possiamo istruire il nostro programma a eseguire un diverso blocco di codice. Il caso d’uso appena descritto può essere ottenuto attraverso il costrutto IF.

Alle volte ci troviamo nella condizione di scegliere fra varie opzioni disponibili e ne dobbiamo scegliere solo una. In questi casi possiamo utilizzare il costrutto SWITCH invece dell’IF in modo da rendere il nostro codice meno verboso e più facile da leggere.

Abbiamo inoltre visto, che possiamo utilizzare diversi costrutti per iterare dipendenti dal caso d’uso specifico in cui ci troviamo.

Il ciclo FOR è adatto a situazione quando dobbiamo iterare un numero definito di volte.

Quando non sappiamo a priori quante volte dobbiamo iterare, possiamo utilizzare il ciclo while o il do while usando una data condizione che farà continuare l’iterazione fino a che sarà vera.

La differenza fra il ciclo while e il do while è che il primo, potrebbe non eseguire alcuna iterazione se la condizione viene subito valutata come falsa mentre il secondo eseguirà sempre almeno un iterazione in quanto la condizione viene valutata alla fine del costrutto.

Se abbiamo una sequenza di valori, come per esempio un array, usare il for each e probabilmente la scelta migliore se vogliamo iterare su tutti gli elementi della sequenza senza preoccuparci dell’indice per accedere ai rispettivi elementi. È un costrutto alquanto sicuro da utilizzare perché possiamo ottenere tutti i valori e ci assicura che non salteremo il primo o l’ultimo (errore che spesso i neofiti fanno quando utilizzano un classico ciclo FOR).