  |
&& (and) |
  |
opera su valori booleani |
crediamo adesso il vero operatore di and, che si scrive con &&, ovvero la & viene ripetuta due volte. Questo operatore si distingue dall'operatore con un solo & per due motivi: il primo e che opera solamente su valori booleani (non si può utilizzare con gli interi).
  |
comportamento short - circuit |
  |
valore determinato se il primo operando è false |
  |
in tal caso non viene valutato il secondo |
Ma il secondo punto differenza, quello fondamentale, è il suo comportamento cosiddetto a corto circuito. Vediamo di capire esattamente che cosa si tratta. Se diciamo che vogliamo dare un osso a Socrate se Socrate e un cane e Socrate scodinzola, nel caso Socrate fosse un uomo, non ci preoccupiamo di controllare che sta scodinzolando (perché generalmente gli uomini non lo fanno). Il concetto è che in una congiunzione (and), perché la congiunzione sia vera e necessario che entrambi i predicati (ovvero le due condizioni) siano vere. Se la prima condizione è falsa, non importa quale sia il risultato della seconda: non è necessario nemmeno prenderla in considerazione: il risultato è comunque falso. Questo fatto viene sfruttato dall'operatore && per arrestare il calcolo nel caso il primo operando è falso. Questo fatto è un dettaglio che può essere fondamentale per scrivere programmi che funzionano.
c != -1 && c = in.read()
  |
se c'è EOF (-1),non viene letto un altro carattere |
Vediamo un esempio: supponiamo di essere in un ciclo che legge un carattere alla volta dall'input. Questo è un esempio realistico: per leggere da un file o da altre sorgenti si utilizza proprio un ciclo che legge caratteri da un flusso in ingresso. Ovviamente si deve continuare a letto di caratteri dall'input finché che stanno; quando sono finiti si deve interrompere il ciclo. Quindi dell'esempio del listato vediamo la condizione di controllo del ciclo, che si interrompe quando se è alla fine del file. Il trucco è che viene ritornato valore speciale -1 quando si è alla fine del ciclo. Il cavillo cui bisogna stare attento è che se non si è alla fine del ciclo, si vuole continuare a leggere dall'input; ma se si è alla fine del ciclo, che vuole fermare, SENZA LEGGERE UN ALTRO CARATTERE. Infatti la lettura dell'input quando questo è finito, può causare spiacevoli effetti collaterali come eccezioni o altre situazione anomala. Sfruttando la caratteristica degli operatori booleani a corto circuito, notiamo che quando la prima condizione è falsa (ovvero siamo alla fine del ciclo) la non viene valutata, evitando così di leggere un carattere oltre la fine.
|