Ecco un rapido esempio di codice sorgente Ruby, che mostra come ho usato l’operatore ternario di Ruby in un metodo che stampa un record CSV per una classe che ho definito:
def print_csv_record last_name.length==0 ? printf(",") : printf("\"%s\",", last_name) first_name.length==0 ? printf(",") : printf("\"%s\",", first_name) city.length==0 ? printf(",") : printf("\"%s\"", city) printf("\n")end
Come potete vedere da questo metodo, ogni linea usa l’operatore ternario per prendere la seguente decisione:
- Se la lunghezza del campo dato è uguale a 0, usa la prima istruzione
printf
. - Altrimenti, usa la seconda istruzione
printf
.
Può non sembrare molto, ma è così. La cosa bella è che è molto più breve dell’equivalente sintassi if
/then
, ed è ancora molto facile da leggere.
Se vuoi maggiori informazioni sull’operatore ternario di Ruby, continua pure a leggere.
Sintassi generale dell’operatore ternario
Come puoi dedurre dall’esempio precedente, la sintassi generale dell’operatore ternario di Ruby è così:
test-expression ? if-true-expression : if-false-expression
Nel mio esempio precedente, il mio primo test-expression
era così:
last_name.length==0
e il suo if-true-expression
era così:
printf(",")
e il suo if-false-expression
era così:
printf("\"%s\",", last_name)
Spero che la dimostrazione della sintassi generale dell’operatore ternario abbia aiutato a rendere il mio codice precedente un po’ più comprensibile.
Un secondo esempio
Se volete un altro esempio dell’operatore ternario, eccone uno che usa un test di confronto numerico, seguito da due possibili istruzioni puts
, una che sarà eseguita se il test è vero e un’altra che sarà eseguita se il test è falso:
# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
Come potete immaginare, questo segmento di codice stamperà:
I can't drive 55!
(che riassume anche le mie abitudini di guida.)
L’operatore ternario è forte. Può accorciare le vostre if
/then
dichiarazioni, e mantenere il vostro codice Ruby leggibile.