Je dois définir une valeur a
qui dépend d'une condition.
Quel est le moyen le plus court de le faire avec CoffeeScript?
Par exemple, voici comment je le ferais en JavaScript:
a = true ? 5 : 10 # => a = 5
a = false ? 5 : 10 # => a = 10
javascript
coffeescript
ternary-operator
evfwcqcg
la source
la source
if else then
</rant>a = true ? 5 : 10
c'est un coffeescript valide, mais ne signifie pas une structure ternaire, au lieu de cela (en javascript) cela signifie:a = true ? true : {5:10}
ce qui est connu comme une mauvaise chose® De plusa = false ? {5 : 10}
en coffeescript, puis (en javascript) est équivalent à:a = true ? false : {5:10}
Pour ce que ça vaut, je ne pense pas que ce soit bon.beast = yeti ? "bear"
ouif yeti? then alert "It's a yeti!"
utilise?
assez bien le.if/then/else
c'est déjà une expression et fait la même chose. Si vous le manquez vraiment, alors vous êtes plutôt habitué à la syntaxe C ou JavaScript qu'à vraiment en avoir besoin. Si ce n'est pas assez lisible, et cela arrive parfois, mettez simplement l'expression entière entre parenthèses. L'opérateur?
a été épargné pour des vérifications plus utiles qui sont absentes dans JavaScript, comme déjà indiqué par @PaulOliver. L'opérateur existentiel est le meilleur.Réponses:
Puisque tout est une expression, et résulte donc en une valeur, vous pouvez simplement l'utiliser
if/else
.Vous pouvez en savoir plus sur les exemples d'expression ici .
la source
if..then..else
c'est trop verbeux pour remplacer ce qui est censé être une expression concise. Et?: Est après tout une norme très ancrée dans de nombreuses langues, JavaScript parmi elles. Malgré tout cela, il semble êtreif then else
sur la même ligne, faites-le, c'est 7 caractères supplémentaires pour plus de clarté et d'élégance.->
overfunction
ou{ }
overbegin .. end
, car j'aime voir un rapport signal / bruit élevé, où les mots sont réservés à une logique spécifique à une fonction et la logique opérationnelle est principalement reléguée aux symboles.Voir documentation .
la source
Dans presque toutes les langues, cela devrait fonctionner à la place:
la source
false
de valeurs telles que 0, null, undefined,… et ainsi de suite&&
marque est véridique, sinon elle retournerait la dernière partie, ce qui n'est pas ainsi que fonctionnent les ternaires conditionnels.Coffeescript ne prend pas en charge l' opérateur ternaire javascript. Voici la raison de l' auteur de coffeescript :
Veuillez vous référer au problème github: https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802
la source
Vous pouvez également l'écrire en deux instructions s'il s'agit principalement d'une utilisation réelle:
Ou utilisez une instruction switch si vous avez besoin de plus de possibilités:
Avec un booléen il peut être surdimensionné mais je le trouve très lisible.
la source
Version multiligne (par exemple, si vous devez ajouter un commentaire après chaque ligne):
la source
CoffeeScript
n'a pas d'opérateur ternaire. C'est ce que disent les docs.Vous pouvez toujours utiliser une syntaxe comme
C'est beaucoup plus clair.
la source