Rubi? Operador
Em Ruby, o ? operador é um operador ternário. É usado como uma taquigrafia para uma declaração se ... else. A sintaxe é a seguinte:
doença ? action_if_true: Action_if_false
Nesse caso, a condição é avaliada como verdadeira ou falsa. Se a condição for verdadeira, a expressão antes da: é executada. Caso contrário, a expressão após: é executada.
Podemos demonstrar isso usando um exemplo como mostrado abaixo:
x = 5
coloca x> 0 ? "positivo negativo"
Nesse caso, o código testará se o valor de x é maior que 0. Se for verdade, o bloco imprimirá positivo. Caso contrário, ele imprimirá negativo.
IRB (principal): 002: 0> coloca x> 0 ? "positivo negativo"
positivo
=> nil
O mesmo caso se aplica se o valor for negativo como mostrado:
IRB (principal): 003: 0> x = -5
IRB (principal): 004: 0> coloca x> 0 ? "positivo negativo"
negativo
=> nil
Você também pode encadear várias condições usando o ? Operador, como mostrado no exemplo abaixo:
x = 5
coloca x> 0 ? "positivo": x == 0 ? "Zero": "negativo"
Nesse caso, a consulta testará o valor de x contra três condições. Se o valor for maior que 0, o código imprimirá positivo. Se o valor for igual a zero, o código imprimirá a string zero. E, finalmente, se nenhuma dessas condições for verdadeira, o código imprimirá “negativo.”
Também podemos usar o ternário ? operador em um método e nomes de variáveis. Isso chamado de "operador de navegação seguro", OR & &. operador e é usado para verificar se o receptor da chamada do método não é nulo antes de ligar para o método.
x = "Olá"
x &.upcase # Olá
y = nil
Y &.UpCase # nil
Também podemos usar o operador ternário para atribuir valor como demonstrado abaixo:
x = 5
y = x> 0 ? 1: -1
Nesse caso, y manterá o valor de 1.
Conclusão
Isso cobriu o básico de trabalhar com o operador ternário Ruby para executar várias operações. Vale a pena notar que o operador ternário tem uma precedência mais baixa do que a maioria dos outros operadores em Ruby. Portanto, pode ser necessário usar parênteses para garantir que as expressões sejam avaliadas na ordem pretendida.
Embora o operador ternário seja adequado para configurar rapidamente uma declaração condicional, ele não fornece uma boa legibilidade de código. Portanto, recomendamos o uso do tradicional se ... senão bloqueio sempre que necessário.