web-dev-qa-db-de.com

Ternärer Operator in CoffeeScript

Ich muss den Wert auf a setzen, der von einer Bedingung abhängt.

Was ist der kürzeste Weg, dies mit CoffeeScript zu tun?

Z.B. So mache ich es in JavaScript:

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

Da alles ein Ausdruck ist und somit ein Wert entsteht, können Sie einfach if/else verwenden.

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

Mehr über Ausdrucksbeispiele hier .

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

Siehe Dokumentation .

67
Paul Oliver

In fast jeder Sprache sollte dies funktionieren:

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

Coffeescript unterstützt den ternären Javascript-Operator nicht. Hier ist der Grund des coffeescript-Autors:

Ich liebe ternäre Operatoren genauso wie der nächste (wahrscheinlich ein bisschen mehr .__ mehr), aber die Syntax macht sie nicht gut - sie sind großartig, weil sie ein if/else in eine einzige Zeile als .__ einfügen können. Ausdruck.

Ihre Syntax ist nur ein weiteres Stück mystifizierender Zauberei, mit Kein Analogon zu etwas anderem in der Sprache. Das Ergebnis ist gleich, Ich hätte lieber if/elses immer gleich aussehen (und immer In einen Ausdruck kompiliert sein).

In CoffeeScript werden sogar mehrzeilige ifs in Ternaries wenn zutreffend, wie auch wenn Anweisungen ohne eine else-Klausel:

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

Beide werden zu Ternaren, beide können als Ausdrücke verwendet werden. Es ist konsistent und es gibt keine neue Syntax zum Lernen. Vielen Dank für den Vorschlag, aber ich schließe das Ticket als "wontfix".

Bitte lesen Sie die Github-Ausgabe: https://github.com/jashkenas/coffeescript/issues/11#issuecomment-97802

11
Max Peng

Sie können es auch in zwei Anweisungen schreiben, wenn es meistens richtig ist:

a = 5
a = 10 if false

Oder verwenden Sie eine switch-Anweisung, wenn Sie mehr Möglichkeiten benötigen:

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

Mit einem Boolean kann es übergroß sein, aber ich finde es sehr gut lesbar.

3
Alinex

Mehrzeilige Version (z. B. wenn Sie nach jeder Zeile einen Kommentar hinzufügen müssen):

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

CoffeeScript hat keinen ternären Operator. Das sagen die Dokumente.

Sie können immer noch eine ähnliche Syntax verwenden

a = true then 5 else 10

Es ist viel klarer.