L’operatore ternario (detto anche “operatore di selezione”) fornisce una sintassi abbreviata per esprimere un particolare tipo di if.
Questa situazione infatti:
if (condizione) {//istruzione 1 (singola istruzione)} else {istruzione 2 (singola istruzione)}
Può essere anche rappresentata più sinteticamente con l’utilizzo dell’operatore ternario:
<condizione> ? <istruzione1> : <istruzione2>
Se nell’esempio delle lezioni precedenti avessimo voluto scrivere due differenti valori per l’altezza della cella, uno per la risoluzione di 800×600 e uno per tutte le altre risoluzioni, al posto di:
if (screen.width==800) {altezzaCella=100;}
else {altezzaCella=150;}
avremmo potuto scrivere:
screen.width==800 ? altezzaCella=100 : altezzaCella=150;
Volendo, l’utilizzo delle parentesi permette di comprendere meglio il costrutto:
(screen.width==800)?(altezzaCella=100):(altezzaCella=150);
Avremmo anche potuto usare la sintassi più compatta:
altezzaCella=screen.width==800?100:150;
Quanto costano i trasporti?
Qui un esempio pratico del codice. Se mettiamo volessimo creare un programma che calcola la convenienza tra la scelta di usare un’auto e prendere il treno potremmo usare l’operatore ternario per restituire output. (In questo caso prima ci sarebbe un inserimento dati tramite Input manuale o API dei costi dei trasporti).
var trainCost = 3;
var carCost = 2;
carCost < trainCost ? print('Drive a car') : print('Buy train tickets');
Lo sniff dei browser
L’operatore ternario viene spesso usato nella sintassi che prevede lo “sniff” (cioè l’individuazione) del browser. È un procedimento tipicamente utilizzato nel dhtml (è l’utilizzo congiunto di JavaScript e dei css) per scrivere sintassi crossbrowser (che vada bene cioè tanto per Internet Explorer, quanto per Netscape o altro):
Il metodo è questo:
- se esiste document.all (o document.layers o altro)
- viene inizializzata una variabile a true
- altrimenti alla variabile viene assegnato il valore di false
Ad esempio:
document.all? IE=true:IE=false;
che può anche essere scritto (semplificando la sintassi):
IE= document.all?true: false;
Poi è sufficiente verificare:
if (IE) { ... }
per sapere di avere a che fare con Interent Explorer.
Il procedimento dettagliato per lo sniff del browser è descritto nell’articolo L’arte dello sniffing: come riconoscere i browser