Nel mondo della programmazione non esistono vie di mezzo ad una domanda: o è vera o è falsa. Ad esempio, se si chiede ad un programma se una variabile, con valore 100, è minore di 10, il programma restituirà come risposta, per forza di cose, vero. Questo almeno col linguaggio della Microsoft C#. Infatti, giusto per aprire una parentesi comunque istruttiva, in linguaggi tipo C e C++, se per caso si domanda ad un programma se una variabile che non è stata inizializzata è minore di 10, tale programma non saprà rispondere, poiche, appunto, nella variabile non è presente nessun valore, e quindi non confrontabile.
Istanziare una variabile booleana, cioè quelle variabili che possono contenere il risultato di un'espressione decisionale (vero o valso), è tale uguale a qualsiasi altra variabile primitiva:
bMinore=true
Gli operatoi Booleani
Ci sono due operatori booleani che vengono utilizzati frequentemente in ambito della programmazione, e cioè l'operatore di uguaglianza (==) e l'operatore di disuguaglianza (!=). Altri operatori sono: Maggiore di (>),Maggiore o Uguale di (>=), minore di (<) e Minore o Uguale di (<=). Tutti questi operatori ritornano come risultato True se l'espressione risulta vera, False in caso l'espressione sia falsa
bRisultato = 10 == 10 // True
bRisultato = 10 != 10 // False
bRisultato = 10 > 10 // False
bRisultato = 10 >= 10 // True
bRisultato = 10 < 10 // False
bRisultato = 10 <= 10 // True
Operazioni tra i valori booleani
In C#, come in tutti gli altri linguaggi di programmazione, esistono deli operatori che permetto di unire delle espressioni booleane tra di loro, formando di fatto un'unica espressione booleana. questi operatori sono l'And, rappresentato in C# dal simbolo &&, e l'Or, rappresentato dal simbolo ||.
L'operatore And ritorna come risultato True solo e soltanto se entrambe le espressioni booleane legate da tale operatore risultano vere, altrimenti da come risultato falso. L'or, invece, ritorna falso solo nel caso entrambe le espressioni risultano false, vero in tutti gli altri i casi.
Il costrutto If .... Else ...
La premesse fatta sugli operatori booleani è servita per introdurvi alla possibilità di permettere al programma di prendere delle decisioni. Infatti può succedere tranquillamente in un programma che una qualche funzione, o semplicemente un'istruzione, debba essere eseguita soltanto in determinate situazioni. Tali decisioni vengono prese tramite, appunto, gli operatori booleani assime al costrutto If.
la sintassi di tale costrutto è la seguente :
{
console.WriteLine("Valore per il denominatore non valido");
}
L'esempio appena fatto è un esempio pratico di utilizzo degli operatori decisionali. Infatti, per evitare, ad esempio, che l'operazione di divisione vada in errore a causa del suo denominatore a 0, si intercetta tale possibilità con tale costrutto. Nella stesura degli operatori if ci si deve ricordare di porre le operazioni booleane tra parentesi, come si vede nell'esempio, e di non mettere alla fine della riga il Punto e virgola. Le parentesi grafe delimitano l'inizio e la fine di tale costrutto. Non sono obbligatorie nel caso il costrutto ha al suo interno una sola istruzione. Nel caso contrario, invece, diventa obbligatorio scriversle.
Se si nota l'esempio si può notare che non è completo. infatti il costrutto si limita a visualizzare un messaggio d'errore nel caso il denominatore sia uguale a zero, senza evitare che l'operazione non venga eseguita, manda così il programma comunque in errore. Per evitare ciò corre in soccorso l'operatore else, il quale esegue il codice nel caso l'espressione booleana risulti falsa. Si noti il seguente esempio.
{
console.WriteLine("Valore per il denominatore non valido");
}
else
{
risultato = nominatore / denominatore;
}
Il costrutto switch
Ci sono casi in cui è necessario confrontare una variabile con vari valori differenti. Si può ovviare al problema utilizzando una serie di costrutti il else nidificati tra loro. Ma poichè la variabile da confrontare è soltanto una sola, e comunque ne grava sia le performance che la leggibilità, è consigliabile utilizzare uno speciale cotrutto: lo switch
switch (mese)
{
case 0:
nomeMese = "Gennaio";
break;
case 1:
nomeMese = "Febbraio";
break;
default:
nomeMese = "";
break;
}
Come si può notare dal codice, l'accesso alla variable mese viene effettuato solamente all'inizio, aumentando le performance del suddetto codice. Una volta letto il valore della variabile, viene confrontata con le varie alternative, eseguendo il codice corrispondente al valore cui risulta uguale. Nel caso non viene trovata nessuna corrispondenza tra le varie alternative, viene eseguito il codice presente nell spazio del default. E' obbigatorio porre, alla vine di ciascun spezzone di codice delle varie alternative,la parola chiave break, la quale indica la fine del codice eseguibile per talealternativa.
Tale costrutto, però, ha delle regole che ne vieta il suo utilizzo, e cioè:
- è possibile utilizzare il costrutto switch soltanto sui tipi di dati primitivi. Per i dati non primitivi è d'obbligo utilizzare il costrutto if;
- i valori delle etichette case devono essere valori costanti. Per utilizzare dei valori calcolati in fase di esecuzione è obbligatorio l'uso del costrutto if;
- due etichette case non devono avere due valori uguali tra loro;



