Ruby opérateur ternaire sans d'autre
Est-il un langage ruby pour le "Si ce" et "faire-ce" juste comme une simple commande?
par exemple, je suis en train de faire
object.method ? a.action : nil
de quitter la clause else vide, mais j'ai l'impression qu'il y a probablement plus idiomatiques façon de faire ce qui n'implique pas de devoir spécifier un nul à la fin. (et sinon, j'ai envie de prendre plusieurs lignes de code serait une perte de temps dans ce cas.
- Ça dépend du contexte, mais parfois, il est plus élégant de lire un si/si/bloc begin avec une seule ligne dans le corps de quelque chose de plus dense/laconique.
Vous devez vous connecter pour publier un commentaire.
Comme une règle générale: vous avez à peu près jamais besoin de l'opérateur ternaire en Ruby. La raison pour laquelle vous en avez besoin dans C, est parce que dans C
if
est une instruction, donc si vous voulez retourner une valeur que vous ont utilisation de l'opérateur ternaire, qui est une expression.En Ruby, tout est une expression, il n'y sont pas de déclarations, ce qui rend l'opérateur ternaire assez bien superflu. Vous pouvez toujours remplacer
avec
Donc, dans votre exemple:
est équivalent à
qui comme @Greg Campbell souligne à son tour, l'équivalent de la fuite
if
modificateur formeAussi, puisque les opérateurs booléens dans Ruby pas juste retour
true
oufalse
, mais la valeur de la dernière expression évaluée, vous pouvez les utiliser pour le contrôle de flux. C'est un idiome importés de Perl, et devrait ressembler à ceci:cond ? a : b
est plus courte queif cond then a else b end
, qui, seule, rend-moi de l'utiliser pour enregistrer 11 caractères 😉?:
) surif/then/else/end
constructions. Il est plus commun, et, évidemment, plus concis".De Greg réponse est le meilleur, mais pour l'enregistrement, et même plus qu'en C, les expressions et les instructions sont équivalentes en Ruby, donc en dehors de
a.action if o.m?
vous pouvez aussi faire des choses comme:Vous pouvez écrire
(a; b; c) if d
ou mêmeou pour cette matière:
(x; y; z) ? (a; b c) : (d; e; f)
Il n'y a pas de situation dans Ruby où une seule instruction ou de l'expression est permis...
result = (<expression> && <true value>) || <false value>
value = 1
result = (value == 1 && 'one' ) || 'two'
result #=> 'one'
Expliquer: valeur == 1 && 'l'un' #=> renvoie dernier résultat de l'expression, la valeur est égale à 1 si et l'article sera évalué, et retour "un".
value = 0
result = (value == 1 && 'one' ) || 'two'
result #=> 'two'
Expliquer: valeur != 1 et 'et' expression ne sera pas évalué, mais au lieu sera utilisé " ou "expression et il retourne "deux"
Une autre façon, cela peut être fait sur la même ligne est:
Cela est considéré comme de mauvais style par Rubocop parce qu'il utilise un point-virgule pour mettre fin à l'expression, mais je trouve ça plus lisible, dans certaines conditions, de virer de bord sur l'instruction si à la fin. Il est plus facile de négliger une instruction if, à la fin et je n'ai pas toujours envie de revenir à quelque chose de si la condition n'est pas vrai(que vous êtes forcé avec un opérateur ternaire).
Vous pouvez aussi être un peu plus détaillé et rubocop de l'environnement: