Oltre ai costrutti if … else if … else … e switch esiste anche una terza sintassi Javascript attraverso la quale è possibile incanalare il flusso di programma a seconda che una data condizione si verifichi oppure no. Questa sintassi è nota come operatore ternario e consiste in un modo "compatto" attraverso il quale scrivere un’istruzione condizionale.
E’ bene precisare che questo tipo di sintassi condizionale Javascript è molto comoda ed utile se si devono affrontare condizioni semplici del tipo if… else… mentre è assolutamente meno adatta a controlli complessi ed articolati, anche perchè questo tipo di sintassi si scrive su una linea singola e non si può andare a capo.
Vediamo la sintassi dell’operatore ternario in Javascript:
condizione ? istruzione1; : istruzione2;
Possiamo tradurre questa sintassi in questo modo: se la condizione è vera esegui l’istruzione n1., in caso contrario esegui l’istruzione n2.
Possiamo dire, dunque, che il simbolo punto interrogativo (?) che segue alla condizione equivale ad una if ed i due punti (:) ad un else.
Vediamo un esempio pratico:
var piove = false;
document.write(piove == true ? 'Fuori piove' : 'Non server l\'ombrello');
Nell’esempio qui sopra abbiamo utilizzato una sola condizione (piove == true) ma nessuno ci vieta di utilizzare, anche con l’operatore ternario, delle comdizioni composite, ad esempio:
var piove = false;
var freddo = true;
document.write(piove == true && freddo == true ? 'Piove e fa freddo' : 'Ho visto giornate peggiori');
Da segnalare, infine, che è possibile combinare tra loro due o più operatori ternari per gestire situazioni più complesse, ad esempio:
var piove = false;
var sole = true;
document.write(piove == true ? 'Fuori piove' : (sole == true ? 'Che bella giornata!' : 'Piuttosto nuvoloso'));
In questo caso il primo operatore (cioè quello più esterno) verifica il valore della variabile "piove", mentre il secondo (che si attiva solo se questa prima variabile è false) effettua un controllo sulla seconda variabile "sole" per decidere quale frase stampare a video.