def bar(foo)
foo.nil? ? nil : foo.to_i
end
Cualquier conciso idioma de Ruby para "foo.nil?? Nil: foo.to_i"?Ruby idioma para "foo.nil?? Nil: foo.to_i"?
def bar(foo)
foo.nil? ? nil : foo.to_i
end
Cualquier conciso idioma de Ruby para "foo.nil?? Nil: foo.to_i"?Ruby idioma para "foo.nil?? Nil: foo.to_i"?
O un poco más corto (si no se puede esperar foo
sea false
)
def bar(foo)
foo.to_i if foo
end
def bar(foo)
foo.to_i unless foo.nil?
end
Pero realmente no ganas nada, IMO, excepto que eliminas el ? ?
. Es un personaje más corto, potencialmente más legible si conoces a Ruby. No sé, ya que califica como "más conciso" que el ternario.
(digo "potencialmente", ya que se podría considerar el comportamiento no es evidente en el caso nil
.)
utilizo la gema andand
Esto permite que vaya:
foo.andand.to_i
que devuelve nil si foo es nulo, o to_i else.
foo and foo.to_i
operadores booleanos short circuit y devolver el valor de la última expresión evaluada.
foo
Si es nil
, se le devolverá y foo.to_i
no se ejecutará.foo
no esnil
, foo.to_i
se evaluará y se devolverá su resultado.Si utiliza ActiveSupport de los carriles se puede escribir usando try
método
foo.try(:to_i)
Solo un comentario: el método 'try' es un método Rails, no Ruby. – leandrotk
Si le sucede que quieren en realidad la versión destructiva de este idioma, es decir
foo = (foo.nil? ? nil : foo.to_i)
entonces se puede do
foo &&= foo.to_i
El lenguaje de rubí adecuado para esto sería
foo && foo.to_i
Sin embargo, ruby 2.3.0 presentó el safe navigation operator, por some reason también conocido como "operador solitario" en la comunidad de rubí. Utilizando eso, puede escribir lo mismo que:
foo&.to_i
con el mismo efecto.
PD: algunas personas hate it.
Diviértete.
Idiomatic way to write Ruby code.
Podemos escribir el código de 4 formas diferentes:
Usando if
:
def bar(foo)
foo.to_i if foo
end
Usando unless
:
def bar(foo)
foo.to_i unless foo.nil?
end
Usando try
método si el uso de rieles:
def bar(foo)
foo.try(:to_i)
end
Usando &.
operador (operador de Rubí navegación segura) si se utiliza de Ruby 2.3.x:
def bar(foo)
foo&.to_i
end
Para más Idiomatic way to write Ruby code, leí un excelente post sobre eso.
O incluso 'foo && foo.to_i'. – tiredpixel