¿Cómo uso el operador condicional (? :) en Ruby?
¿Cómo se usa el operador condicional ( ? :
) en Ruby?
Por ejemplo, ¿es esto correcto?
<% question = question.size > 20 ? question.question.slice(0, 20)+"..." : question.question %>
Aceptado
Es el operador ternario y funciona como en C (los paréntesis no son necesarios). Es una expresión que funciona así:
if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this
Sin embargo, en Ruby, if
también es una expresión so: if a then b else c end
=== a ? b : c
, excepto por cuestiones de precedencia. Ambas son expresiones.
Ejemplos:
puts (if 1 then 2 else 3 end) # => 2
puts 1 ? 2 : 3 # => 2
x = if 1 then 2 else 3 end
puts x # => 2
Tenga en cuenta que en el primer caso se requieren paréntesis (de lo contrario, Ruby se confunde porque cree que tiene puts if 1
algo de basura adicional después), pero no son necesarios en el último caso ya que dicho problema no surge.
Puede utilizar el formulario "si largo" para facilitar la lectura en varias líneas:
question = if question.size > 20 then
question.slice(0, 20) + "..."
else
question
end
puts true ? "true" : "false"
=> "true"
puts false ? "true" : "false"
=> "false"