Gli operatori relazionali, che abbamo visto nella lezione precedente, servono fondamentalmente a confrontare due valori. Il risultato di questo confronto viene utilizzato per modificare il flusso di un programma, cioè verranno eseguite delle istruzioni invece di altre. L’istruzione if ci consente appunto di effettuare tutto questo. La sintassi è: if (val1 [operatore] val2) { istruzione/i; } Dove [operatore] è uno degli operatori relazionali visti, val1 e val2 sono due variabili o valori costanti ed infine il blocco di codice è l’insieme delle istruzioni che verrà eseguito. Se il risultato del confronto è vero, il blocco di codice verrà eseguito, in caso contrario verrà eseguita direttamente l’istruzione subito dopo l’if. Il seguente codice descrive un semplice utilizzo dell’istruzione if. Copiatelo ed eseguitelo.
La riga 9 contiene l’istruzione if che confronta le due variabili tramite l’operatore ==. Come potete notare le due variabili (il contenuto) non sono uguali quindi l’istruzione di stampa contenuta nel blocco di codice non verrà eseguita. Infatti il risultato del confronto è falso (false) così il controllo del programma passerà direttamente all’istruzione della riga 13 (che verrà eseguita comunque). A volte è necessario verificare più condizioni simultaneamente. A tal proposito bisogna introdurre una nuova piccola famiglia di operatori: operatori condizionali. Questi operatori non sono stati descritti nelle lezioni precedenti perché sono in stretta relazione con l’istruzione if e mi sembrava giusto parlarne qui. Operatore condizionale AND (&&). In una istruzione if, a volte, è necessario testare contemporaneamente più di una condizione. Per esempio: test1 test2 if ((val1 [operatore] val2) [op. condiz.] (val3 [operatore] val4)) { istruzione/i; } L’istruzione nel blocco di codice verrà eseguita se e solo se entrambi i tests risulteranno veri. Quindi se almeno uno dei test dovesse risultare falso (false) il blocco di codice non verrà eseguito. A tal proposito ci può essere di aiuto questa tabella (detta anche tabella della verità):
Da questa tabella si vede benissimo che il risultato true compare solo una volta e proprio quando entrambi i tests sono true. Questa è la teoria, ora passiamo alla pratica. L’operatore condizionale AND viene definito dal costrutto && . Per esempio: test1 test2 if ((val1 <= val2) && (val3 > val4)) { istruzione/i; } il blocco di codice verrà eseguito quando sia il test1 sia il test2 risulteranno true. Modifichiamo ora il listato del programma precedente:
la riga 9 è stata modificata inserendo l’operatore and && . Provate a lanciarlo e vedrete che il blocco di codice dell’istruzione if verrà eseguito in quanto entrambe le condizioni risulteranno true. Operatore condizionale OR (||). Al contrario dell’operatore AND, potremmo avere necessità di testare che almeno una condizione del confronto risulti vera. A tal proposito utilizzeremo l’operatore OR. Questa è la sua tabella della verità:
da cui si evince che basta un solo test che sia true per avere come risultato true. Per utilizzare l’operatore OR, faremo uso del costrutto || (doppio pipe) che viene digitato premendo il tasto SHIFT+\. Modifichiamo il solito codice inserendo l’operatore OR come si vede nel listato alla riga 9.
Anche in questo caso viene eseguito il blocco di codice relativo. Poniamoci ora una domanda: come potrei fare eseguire del codice nel caso in cui il risultato del test è falso? Nel listato precedente non c’era questa possibilità. Avrei potuto aggiungere una nuova istruzione if che avrebbe avuto il compito di testare la nuova condizione. Avrei potuto, ma il C# ci viene incontro con una parola chiave utilizzata appunto con l’if: else. Questa è la sua sintassi: if (val1 [operatore] val2) { istruzioni 1; // se true } else { istruzioni 2; // se false } Il costrutto else è l’alternativa dell’if, cioè esegue il blocco di codice istruzioni 2 se il risultato del test è false senza bisogno di aggiungere un nuovo test. Con questo nuovo costrutto possiamo tranquillamente modificare il listato precedente semplicemente aggiungendo le seguenti righe di codice subito dopo la riga 12 lasciando inalterato tutto il resto: else { Console.WriteLine("Il risultato è: falso"); } Provate a cambiare il test affinché si possa eseguire il codice dell’else. Nella prossima lezione, parleremo di un costrutto molto particolare che ci consente di modificare il flusso del programma in base a più valori che può assumere una variabile: l’istruzione switch. |