Itt egy gyors példa néhány Ruby forráskódra, amely megmutatja, hogyan használtam a Ruby terner operátorát egy olyan metódusban, amely kiír egy CSV rekordot egy általam definiált osztályhoz:
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
Amint ebből a módszerből látható, minden sor a terner operátort használja a következő döntés meghozatalára:
- Ha az adott mező hossza 0, használjuk az első
printf
utasítást. - Máskülönben használjuk a második
printf
utasítást.
Ez talán nem tűnik soknak, de ez az. A király dolog az, hogy sokkal rövidebb, mint az ezzel egyenértékű if
/then
szintaxis, és még mindig nagyon könnyen olvasható.
Ha szeretnél még egy kicsit többet megtudni a Ruby terner operátoráról, olvass tovább.
A terner operátor általános szintaxisa
Amint az előző példából kiderülhet, a Ruby terner operátorának általános szintaxisa így néz ki:
test-expression ? if-true-expression : if-false-expression
Az előző példámban az első test-expression
így nézett ki:
last_name.length==0
és a hozzá tartozó if-true-expression
így nézett ki:
printf(",")
és a hozzá tartozó if-false-expression
így nézett ki:
printf("\"%s\",", last_name)
Remélhetőleg a terner operátor általános szintaxisának bemutatása segített egy kicsit érthetőbbé tenni a korábbi kódomat.
Egy második példa
Ha szeretnél még egy példát a terner operátorra, itt van egy, amely egy numerikus teszt összehasonlítást használ, amelyet két lehetséges puts
utasítás követ, egy olyan, amely akkor fog végrehajtódni, ha a teszt igazra értékelődik, és egy másik, amely akkor fog végrehajtódni, ha a teszt hamisra értékelődik:
# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
Amint sejthetitek, ez a kódrészlet kiírja:
I can't drive 55!
(Ami egyben összefoglalja a vezetési szokásaimat is.)
A terner operátor király. Lerövidítheti a if
/then
utasításokat, és még mindig olvasható marad a Ruby kódod.