Syntaxe ternárního operátoru jazyka Ruby

Tady je rychlý příklad zdrojového kódu jazyka Ruby, který ukazuje, jak jsem použil ternární operátor jazyka Ruby v metodě, která vytiskne záznam CSV pro třídu, kterou jsem definoval:

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

Jak vidíte z této metody, každý řádek používá ternární operátor k následujícímu rozhodnutí:

  1. Je-li délka daného pole rovna 0, použije se první příkaz printf.
  2. V opačném případě použijte druhý příkaz printf.

Musí se to zdát málo, ale je to tak. Skvělé je, že je to mnohem kratší než ekvivalentní syntaxe if/then, a přesto je to velmi přehledné.

Pokud byste se chtěli o ternárním operátoru jazyka Ruby dozvědět více, neváhejte a čtěte dál.

Obecná syntaxe ternárního operátoru

Jak můžete pochopit z předchozího příkladu, obecná syntaxe ternárního operátoru jazyka Ruby vypadá takto:

test-expression ? if-true-expression : if-false-expression

V mém předchozím příkladu vypadal můj první test-expression takto:

last_name.length==0

a jeho if-true-expression vypadal takto:

printf(",")

a jeho if-false-expression vypadal takto:

printf("\"%s\",", last_name)

Doufám, že ukázka obecné syntaxe ternárního operátoru pomohla, aby byl můj předchozí kód trochu srozumitelnější.

Druhý příklad

Pokud byste chtěli ještě jeden příklad ternárního operátoru, zde je příklad, který používá číselné porovnání testu, po němž následují dva možné příkazy puts, jeden, který se provede, pokud test vyhodnotí jako true, a druhý, který se provede, pokud test vyhodnotí jako false:

# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")

Jak asi tušíte, tento úsek kódu vypíše:

I can't drive 55!

(Což také shrnuje mé řidičské návyky.)

Ternární operátor je super. Dokáže zkrátit příkazy if/then, a přitom zachovává čitelnost kódu Ruby.