Tässä on nopea esimerkki Rubyn lähdekoodista, joka osoittaa, miten käytin Rubyn ternäärioperaattoria metodissa, joka tulostaa CSV-tietueen määrittelemälleni luokalle:
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
Kuten tuosta metodista näkyy, jokainen rivi käyttää ternäärioperaattoria seuraavan päätöksen tekemiseen:
- Jos annetun kentän pituus on 0, käytä ensimmäistä
printf
-lausetta. - Muussa tapauksessa käytä toista
printf
-lauseketta.
Ei ehkä tunnu paljolta, mutta siitä on kyse. Hienoa on, että se on paljon lyhyempi kuin vastaava if
/then
-syntaksi, ja se on silti hyvin helppolukuinen.
Jos haluat hieman lisää tietoa Rubyn ternäärisestä operaattorista, lue rohkeasti eteenpäin.
Ternäärioperaattorin yleinen syntaksi
Kuten edellisestä esimerkistä voit päätellä, Rubyn ternäärioperaattorin yleinen syntaksi näyttää tältä:
test-expression ? if-true-expression : if-false-expression
Edellisessä esimerkissäni ensimmäinen test-expression
näytti tältä:
last_name.length==0
ja sen if-true-expression
näytti tältä:
printf(",")
ja sen if-false-expression
näytti tältä:
printf("\"%s\",", last_name)
Toivottavasti ternaario-operaattorin yleisen syntaksin havainnollistaminen auttoi tekemään aiemmasta koodistani hieman ymmärrettävämpää.
Toinen esimerkki
Jos haluat vielä yhden esimerkin ternäärisestä operaattorista, tässä on yksi esimerkki, jossa käytetään numeerista testivertailua ja sen jälkeen kahta mahdollista puts
lauseketta, joista toinen suoritetaan, jos testin tulokseksi tulee true, ja toinen, jos testin tulokseksi tulee false:
# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
Kuten arvata saattaa, tämä koodinpätkä tulostaa:
I can't drive 55!
(Joka myös tiivistää ajotapani.)
Ternäärioperaattori on siisti. Se voi lyhentää if
/then
-lauseita ja pitää silti Ruby-koodisi luettavana.