web-dev-qa-db-fra.com

Opérateur ternaire dans CoffeeScript

Je dois définir la valeur sur a qui dépend d'une condition.

Quel est le moyen le plus rapide de faire cela avec CoffeeScript?

Par exemple. Voici comment je le ferais en JavaScript:

a = true  ? 5 : 10  # => a = 5
a = false ? 5 : 10  # => a = 10
301
evfwcqcg

Puisque tout est une expression et qu’il en résulte une valeur, vous pouvez simplement utiliser if/else.

a = if true then 5 else 10
a = if false then 5 else 10

Vous pouvez en savoir plus sur les exemples d'expression ici .

520
loganfsmyth
a = if true then 5 else 10
a = if false then 5 else 10 

Voir documentation .

67
Paul Oliver

Dans presque toutes les langues, cela devrait fonctionner à la place:

a = true  && 5 || 10
a = false && 5 || 10
21
Alexander Senko

Coffeescript ne supporte pas l'opérateur ternaire javascript . Voici la raison de l'auteur coffeescript:

J'adore les opérateurs ternaires tout autant que le type à côté (probablement un peu Plus, en fait), mais la syntaxe n'est pas ce qui les rend bons - ils sont super parce qu’ils peuvent adapter un if/else sur une seule ligne en tant que expression.

Leur syntaxe est juste une autre magie mystifiante à mémoriser, avec aucun analogue à rien d'autre dans la langue. Le résultat étant égal, Je préférerais que if/elses soit toujours identique (et toujours compilé en une expression).

Ainsi, dans CoffeeScript, même les if multi-lignes seront compilées en ternaires le cas échéant, comme le seront les déclarations sans clause else:

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

Les deux deviennent des ternaires, les deux peuvent être utilisés comme expressions. C'est cohérent et il n'y a pas de nouvelle syntaxe à apprendre. Donc, merci pour la suggestion, mais je ferme ce ticket comme "wontfix".

Veuillez vous reporter au numéro de github: https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

11
Max Peng

Vous pouvez aussi l'écrire en deux déclarations si c'est la plupart du temps vrai:

a = 5
a = 10 if false

Ou utilisez une instruction switch si vous avez besoin de plus de possibilités:

a = switch x
  when true then 5
  when false then 10

Avec un booléen, il peut être surdimensionné mais je le trouve très lisible.

3
Alinex

Version multiligne (par exemple, si vous devez ajouter un commentaire après chaque ligne):

a = if b # a depends on b
then 5   # b is true 
else 10  # b is false
1
quotesBro

CoffeeScript n'a pas d'opérateur ternaire. C'est ce que disent les docs.

Vous pouvez toujours utiliser une syntaxe comme

a = true then 5 else 10

C'est beaucoup plus clair.

0