Aqui está um exemplo rápido de algum código fonte Ruby, mostrando como utilizei o operador ternário do Ruby num método que imprime um registo CSV para uma classe que eu defini:
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
Como pode ver a partir desse método, cada linha usa o operador ternário para tomar a seguinte decisão:
- Se o comprimento do campo dado for igual a 0, use a primeira instrução
printf
. - Outros, use a segunda
printf
instrução.
Pode não parecer muito, mas é só isso. O legal é que é muito mais curto que o equivalente a if
/then
sintaxe, e ainda é muito fácil de ler.
Se você quiser um pouco mais de informação sobre o operador ternário Ruby, sinta-se à vontade para continuar lendo.
Sintaxe geral do operador ternário
Como pode ver pelo exemplo anterior, a sintaxe geral do operador ternário do Ruby é assim:
test-expression ? if-true-expression : if-false-expression
No meu exemplo anterior, o meu primeiro test-expression
era assim:
last_name.length==0
e o seu if-true-expression
ficou assim:
printf(",")
e o seu if-false-expression
ficou assim:
printf("\"%s\",", last_name)
Aesperadamente demonstrando a sintaxe geral do operador ternário ajudou a tornar o meu código anterior um pouco mais compreensível.
Um segundo exemplo
Se você quiser mais um exemplo do operador ternário, aqui está um que usa uma comparação de teste numérico, seguido por duas possíveis puts
afirmações, uma que será executada se o teste for verdadeiro, e outra que será executada se o teste for falso:
# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
Como você pode adivinhar, este segmento de código será impresso:
I can't drive 55!
(Que também resume os meus hábitos de condução.)
O operador ternário é legal. Ele pode encurtar as suas declarações if
/then
, e ainda mantém o seu código Ruby legível.