Imparare C#Principianti

Operatori Logici

Come dico sempre.. non spaventatevi!
Per qualcuno di voi questi simboli potrebbero sembrare complicati geroglifici.
Ma non c’è nulla di complicato! E sopratutto, non dovrete impararli tutti a memoria. Vedremo solo lo stretto necessario per potervi mettere sulla strada giusta.

Operatori di Logici
OPERAZIONE SIMBOLO
AND (completo) &
AND (corto circuito) &&
OR (completo) |
OR (corto circuito) ||
NOT (negazione) !
XOR ^

Dopo pochi test questi simboli vi sembreranno anche simpatici, perchè vi affezionerete a loro perché vi permetteranno di fare cose che non pensavate sareste mai in grado di fare!

Se avete fatto le scuole superiori in qualche istituto tecnico li avrete sicuramente già incontrati.


Questi operatori lavorano sui dati di tipo bool che, come abbiamo già visto, possono avere il valore vero (true) o falso (false).

Facciamo un passo indietro. Avrete notato che abbiamo definito true o false anche la condizione all’interno di un if . Infatti, abbiamo detto che, se la condizione all’interno delle parentesi dell’if risultasse vera, allora faremo eseguire del codice, se risultasse falsa faremo eseguire altro codice. Dunque, possiamo dire che dopo aver usato un qualunque operatore di confronto, avremo sempre una condizione, o true o false.

(numero>10)

Questa riga produrrà una delle due condizioni, vero o falso. Se numero è maggiore di 10 allora avremo true, in tutti gli altri casi (se è minore o uguale a 10 ) avremo false .

Mettiamo ora il caso che volessimo verificare se la variabile numero sia maggiore di 10 ma anche minore di 20.
Ci troveremo con due condizioni:     (numero>10)    e    (numero<20).
Useremo un operatore logico che verifica entrambe le condizioni bool, l’operatore &.



 L’operatore &.

Per verificare se numero sia maggiore di 10 ad anche minore di 20 useremo l’operatore & in questo modo:

(numero>10) & (numero<20)

Creiamo ora un’altra variabile bool, che chiameremo test e salviamoci il risultato dei due controlli.

bool test=(numero>10) & (numero<20) ;


In questo caso, l
a variabile test, di tipo bool, risulterà vera solo se entrambe le condizioni risulteranno vere.

Dunque, se la variabile test di tipo bool risultasse vera, la nostra verifica sarebbe stata confermata, numero sarebbe maggiore di 10 e minore di 20.

L’operatore & verifica due o più condizioni ma perché è diverso da &&?
In effetti, se sostituissimo & con && il risultato sarebbe identico.
Ciò che cambierebbe sarebbe solo a livello di prestazioni. Vediamo perchè.

L’operatore & si chiama AND completo perché esso verifica entrambe le condizioni.
Cioè, nel nostro caso, verifica prima se numero>10 e poi, in qualunque caso, verificherà se numero<20.

Ma, se ci pensate bene, il secondo controllo risulterebbe inutile se al primo controllo (cioè verificando se numero>10) il risultato fosse false. Perché è ovvio che, qualunque risultato tornasse dal secondo controllo, essendo il primo falso, test sarà comunque falso, perché, come abbiamo visto, per rendere test vero, entrambi i controlli devono essere veri.

Dunque a che serve fare il secondo controllo se abbiamo già visto che il primo è già false? Non c’è nessuna necessità di controllare se il secondo controllo sia falso perché il risultato sarebbe comunque falso.
Per evitare questo inutile controllo è dunque preferibile utilizzare && che, al contrario di &, alla prima condizione falsa incontrata, non continuerà a fare altri controlli e porrà subito il risultato come false evitando tempi di calcolo inutili.



L’operatore | (oppure).

Prendiamo lo stesso test di poco fa:

bool test=(numero>10) | (numero<20) ;


Questo operatore restituisce vero (true) a condizione che almeno una delle due verifiche risulti vera.

 

Poniamo per esempio numero= 25;
In questo caso avremo che la prima condizione risulterà vera ma la seconda falsa perché 25 è maggiore di 20.
Ma, avendo almeno una delle due condizioni vera, il risultato di test sarà vero (true) .
In termini pratici, l’operatore | viene chiamato oppure perché è come se facesse questa verifica:

perché test risulti vero basterà che numero sia maggiore di 10 oppure basterà che numero sia minore di 20.

Sarà dunque sufficiente che il numero sia maggiore di 10 per avere il risultato uguale a true.
Sarà anche sufficiente che il numero sia minore di 20 per avere il risultato uguale a true.
Solo se entrambi i controlli risultassero falsi, il risultato sarebbe false.

Come descritto per l’operatore & anche l’operatore | farà sempre e comunque entrambe le verifiche, a prescindere dal risultato della prima verifica. E come per l’operatore &, anche l’operatore | possiede il suo operatore “corto circuito”, ovvero l’operatore ||.
E’ preferibile anche in questo caso, l’utilizzo di || che continuerà ad effettuare i controlli solo se sarà il caso.
Infatti, l’operatore || valuta la prima condizione e, se questa risultasse true, non avrebbe bisogno di valutare la seconda perché comunque il risultato sarebbe true.
Se invece la prima condizione risultasse false, sarebbe costretto a valutare anche la seconda.


 

L’operatore ! (negazione).

Questo operatore non fa altro che negare una condizione bool, ovvero, la inverte.
Dunque, se avessimo

bool test = true;

Se creassimo un’altra variabile (che chiameremo test2) e scrivessimo che:

bool test2 = !test;

test2 risulterebbe false
Se test fosse false, test2 sarebbe vera.
Sarebbe cioè test2, sempre il contrario di test.

Allo stesso modo degli altri operatori, potremmo fare un controllo if su una variabile e verificare che la condizione nell’ if sia falsa.

if(test!= 10) { fai questo… }

Significa: se test è diverso da 10, fai questo.
In pratica, l’opertore !=  è l’inverso dell’operatore di confronto ==.
!= controlla che il risultato sia diverso da… Mentre == controlla che sia uguale a….

Possiamo dedurre che questi due script facciano la stessa identica cosa:

if(test==10){esegui metodo A}
else
{esegui metodo B}

//Se test è uguale a 10, esegui A
//altrimenti
//esegui B
if(test!=10)<br>{esegui metodo B}
else
{esegui metodo A}

//Se test è diverso da 10, esegui B
//altrimenti
//esegui A

 

Un pensiero su “Operatori Logici

  1. if(test!=10){esegui metodo B}
    else
    {esegui metodo A}

    //Se test è diverso da 10, esegui B
    //altrimenti
    //esegui A
    per cosa sta il br?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *