Ternaire opération en CoffeeScript
- Je besoin de créer de la valeur à a
qui dépend d'une condition.
Quel est le chemin le plus court pour ce faire avec CoffeeScript?
E. g. c'est ce que je pourrais faire ça en JavaScript:
a = true ? 5 : 10 # => a = 5
a = false ? 5 : 10 # => a = 10
- double possible de opérateur Conditionnel en Coffeescript?
- <rant> je souhaite café script pourrait avoir juste pris en charge l'opérateur ternaire de la syntaxe, c'est plus court et plus facile à lire que
if else then
</rant> - Boo. Ce n'est pas bon. Ternaires peut être sympa parfois.
- Je pense que le ternaire serait de faire un café moins Ruby-ish, même si Ruby a que. Le but avec le café est toujours à la lisibilité et à l'arrondissement de rugueux coins.
- d'accord, mais ce que vraiment je trouve le plus troublant est que
a = true ? 5 : 10
est valable coffeescript, mais ne signifie pas une structure ternaire, à la place (en javascript), cela signifie:a = true ? true : {5:10}
qui est connu comme une mauvaise chose® en Outrea = false ? {5 : 10}
en coffeescript (en javascript) est équivalent à:a = true ? false : {5:10}
Pour ce que ça vaut, je ne pense pas que c'est bon. - Il est peut-être pour le meilleur de préciser si..alors..sinon pour CoffeeScript. L' ? comme une existence opérateur fait beaucoup de sens:
beast = yeti ? "bear"
ouif yeti? then alert "It's a yeti!"
rend l'utilisation de la?
assez bien. - Un opérateur ternaire en ligne avec une valeur d'objet fait coffeescript se comporter comme HAL est en train de mourir minutes. C'est tout simplement stupide.
- Séparer opérateur ternaire n'est pas vraiment nécessaire en CoffeeScript comme
if/then/else
est déjà une expression et fait la même chose. Si vous êtes vraiment en manque, alors vous êtes plutôt utilisé en C ou la syntaxe JavaScript que vraiment dans le besoin. Si ce n'est pas assez lisible, et il n'est parfois arriver, il suffit de l'envelopper de toute expression entre parenthèses. Opérateur?
a été épargné pour plus de contrôles, qui sont absentes dans le JavaScript, comme déjà indiqué par @PaulOliver. Existentielle de l'opérateur est le meilleur. - l'opérateur ternaire et existentielle de l'opérateur pour les appels de méthode ont contradictoires syntaxe:
a=b?(c+d):e
; ce devrait être l'opérateur ternaire appel, ou existentielle de l'opérateur d'appel de la fonction b?
Vous devez vous connecter pour publier un commentaire.
Puisque tout est une expression, et donc des résultats à une valeur, vous pouvez simplement utiliser
if/else
.Vous pouvez en savoir plus sur l'expression des exemples ici.
if..then..else
est trop verbeux un remplacement pour ce qui est censé être une expression concise. Et ?: est, après tout, un très enracinée standard parmi de nombreuses langues, JavaScript parmi eux. Malgré tout, il semble être dans la pierre à ce stade.]if then else
sur la même ligne, le faire, c'est de 7 caractères supplémentaires, pour plus de clarté et d'élégance.Voir la documentation.
Dans presque n'importe quelle langue cela devrait fonctionner à la place:
false
de valeurs telles que 0, null, undefined,... et ainsi de suite&&
marque est truthy, sinon, il serait de retour la dernière partie, qui n'est pas la façon conditionnelle ternaires de travail.Coffeescript ne prend pas en charge javascript opérateur ternaire.
Voici la raison de la coffeescript auteur:
Veuillez vous référer à la github question: https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802
Vous pouvez aussi l'écrire en deux états si elle est la plupart du temps vrai utilisation:
Ou d'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.
Multiligne version (par exemple, si vous avez besoin d'ajouter un commentaire après chaque ligne):
CoffeeScript
n'a pas d'opérateur ternaire. C'est ce que les docs disent.Vous pouvez toujours utiliser une syntaxe du type
C'est de façon beaucoup plus claire.