Como regla general: que casi nunca se necesita el operador ternario en Ruby. La razón por la que lo necesita en C, es porque en C if
es una declaración, por lo que si desea devolver un valor, tiene para usar el operador ternario, que es una expresión.
En Ruby, todo lo es una expresión, no son ninguna declaración, lo que hace el operador ternario más o menos superfluo. Siempre se puede sustituir
cond ? then_branch : else_branch
con
if cond then then_branch else else_branch end
Así, en su ejemplo:
object.method ? a.action : nil
es equivalente a
if object.method then a.action end
que, como señala @ Greg Campbell es a su vez, equivalente al if
modificador de forma
a.action if object.method
Además, dado que los operadores booleanos en Ruby no sólo vuelven true
o false
, pero el valor de la última expresión evaluada, se pueden utilizar para el control de flujo. Este es un modismo importado de Perl, y se vería así:
object.method and a.action
Depende del contexto, pero a veces es más elegante de leer un if/while/comienzan bloque con una sola línea en el cuerpo de algo más denso/lacónico. –