I costrutti condizionali basati sui blocchi if
e else
permettono di eseguire del codice in base a determinate condizioni. Come accennato nel precedente capitolo esiste però un operatore che consente di rappresentare un costrutto condizionale in una maniera alternativa e molto più snella dal punto di vista del codice digitato. Stiamo parlando dell'operatore ternario.
Quest'ultimo rappresenta una valida alternativa sintattica alle espressioni if/else
nel caso in cui sia necessario valutare espressioni semplici. Tale operatore è così chiamata poiché prevede l'adozione di 3 diversi argomenti, cioè nell'ordine:
- l'espressione da valutare;
- il valore di ritorno nel caso in cui l'espressione sia vera;
- il valore di ritorno nel caso in cui l'espressione sia falsa.
A tal proposito è possibile analizzare il semplice esempio seguente:
$maggiorenne = ($eta >= 18) ? true : false;
Il codice proposto mostra come utilizzare l'operatore ternario. Il primo argomento ($eta >= 18)
è l'espressione da valutare, seguito da un punto interrogativo ?
e i due argomenti in caso di espressione vera o falsa separati da due punti :
.
Come sottolineato in precedenza, l'operatore ternario rappresenta un'alternativa al costrutto if/else
; a riprova di ciò un esempio equivalente a quello precedente sarebbe stato espresso tramite questi ultimi in questo modo:
if ($eta >= 18) {
$maggiorenne = true;
} else {
$maggiorenne = false;
}
Operatore ternario abbreviato
Si analizzi un ulteriore esempio di utilizzo dell'operatore ternario per la valutazione di una condizione:
$messaggio = "Ciao " . ( $username ? $username : 'utente' );
Nell'esempio appena presentato la variabile $messaggio
conterrà il valore relativo alla "username" dell'utente soltanto nel caso in cui la variabile associata ad essa ($username
) sia stata effettivamente definita, in caso contrario verrà utilizzata la stringa utente
.
Se il valore da restituire nel caso in cui l'espressione sia vera dovesse corrispondere esattamente all'espressione valutata, allora potrà essere omesso il secondo parametro unendo il punto interrogativo con i due punti, ?:
, ottenendo così quello che viene chiamato l'operatore ternario abbreviato. Sulla base di quanto detto è possibile riscrivere l'esempio precedente in questo modo:
$messaggio = "Ciao " . ( $username ?: 'utente' );
Operatori ternari concatenati
Dato che la valutazione di un operatore ternario restituisce un valore, è anche possibile concatenare operatori ternari tra di loro.
$patente = ($eta >= 18) ? ($esame_superato ? true : false) : false;
Nell'ultimo esempio proposto abbiamo due operatori ternari: il primo verifica che il valore associato alla variabile $età
sia maggiore o uguale a "18", il secondo viene invece valutato soltanto se la prima condizione risulta vera, verificando che l'esame sia stato superato. La variabile $patente
sarà quindi vera se e solo se si verificano entrambe le condizioni, altrimenti sarà falsa.
Per quanto ci venga concessa la possibilità di concatenare gli operatori ternari, però, è sconsigliabile l'utilizzo in questa maniera dato che riduce di molto la leggibilità del codice.