ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Basi | Espressioni | Comandi | Classi | Ereditarieta | Eccezioni | Thread | Utilita | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

Espressioni
Espressioni
Primitivi
Costanti
Booleane
Carattere
Numeri
Operatori
Promozione
Overloading
Aritmetici
Virgola Mobile
Relazionali
Binari
Shift
Negazione
And
Or
Condizionale
Incremento
Assegnamento

<<< And >>>
&& (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.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com