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

<<< Condizionale >>>
? : operatore condizionale, ternario (l'unico)

un altro operatore interessante, ha anche la caratteristica di essere speciale in termini sintattici: si tratta infatti di un operatore "ternario". Questo operatore prende tre operandi. Per capire come funziona, consideriamo un operatore binario che viene scritto come "a + b". L'operatore ternario in questione viene scritto come "a ? b : c", dove il punto interrogativo e i due punti vanno sempre di pari passo, e vanno scritti entrambi in quest'ordine.

il primo valore deve essere un valore booleano
gli altri due possono essere quasiasi tipo
devono essere dello stesso tipo (o convertibili allo stesso tipo)

Questo operatore è chiamato operatore condizionale in quanto ritorna un valore oppure un altro valore a seconda di una condizione. Il primo operando è la condizione, di conseguenza deve essere una espressione che viene valutata ad un valore booleano. Il secondo e il terzo operando invece sono il risultato finale: se primo operando viene valutato a vero, si ottiene come risultato il secondo operando. Se il primo operando viene valutato falso, si ottiene come risultato terzo operando. È importante rendersi conto che il secondo e il terzo operando devono essere dello stesso tipo, o almeno convertibili allo stesso tipo. In particolare, una cosa che non posso assolutamente fare è ritornare un tipo primitivo come secondo operando, e un oggetto come terzo operando.

comportamento short - circuit:
(a > b) ? f() : g()
se a >b chiamo f() altrimenti chiamo g()

Anche questo operando ha un comportamento a corto circuito. Viene valutata la condizione: se la prima condizione è vera, allora viene valutata il secondo operando. Se la prima condizione è falsa, viene valutato il terzo operando. Nel listato è mostrato che se a è minore di b, allora chiamo f(), altrimenti chiamo g(). Solamente una delle due di f() o g() viene però effettivamente chiamata.

double sqrtmax(double a, double b) { 
     return a > b  
     ? Math.sqrt(a) 
     : Math.sqrt(b); 
}
calcola la radice una volta sola

consideriamo questo esempio, che ritorna la radice quadrata del massimo tra a e b. In questo caso la radice viene calcolata una volta sola. In ogni caso si ha un risparmio di tempo di esecuzione.

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