332 Stimmen

Ternäre Operation in CoffeeScript

Ich muss den Wert auf a die von einer Bedingung abhängt.

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

So würde ich es z.B. in JavaScript machen:

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

566voto

loganfsmyth Punkte 146387

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

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

Sie können mehr über Ausdrucksbeispiele sehen aquí .

70voto

Paul Oliver Punkte 7311
a = if true then 5 else 10
a = if false then 5 else 10 

Voir Dokumentation .

22voto

Alexander Senko Punkte 531

In fast jeder Sprache sollte dies stattdessen funktionieren:

a = true  && 5 || 10
a = false && 5 || 10

17voto

Max Peng Punkte 2471

Coffeescript unterstützt nicht javascript ternärer Operator. Hier ist der Grund aus dem coffeescript-Autor :

Ich liebe ternäre Operatoren genauso sehr wie jeder andere mehr), aber die Syntax ist nicht das, was sie gut macht - sie sind Sie sind großartig, weil sie ein if/else auf einer einzigen Zeile als Ausdruck.

Ihre Syntax ist nur ein weiteres Stück geheimnisvoller Magie, das man auswendig lernen muss, mit ohne Analogie zu irgendetwas anderem in der Sprache. Das Ergebnis ist dasselbe, hätte ich viel lieber if/elses immer gleich aussehen zu einem Ausdruck kompiliert werden).

In CoffeeScript werden also selbst mehrzeilige ifs zu ternären Werten kompiliert kompiliert, wenn es angemessen ist, ebenso wie if-Anweisungen ohne else-Klausel:

if sunny   
  go_outside() 
else   
  read_a_book().

if sunny then go_outside() else read_a_book()

Beide werden zu Ternären, beide können als Ausdrücke verwendet werden. Es ist konsistent, und es gibt keine neue Syntax zu lernen. Also, danke für den Vorschlag, aber ich schließe dieses Ticket als "wontfix".

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

4voto

Alinex Punkte 894

Sie können es auch in zwei Aussagen schreiben, wenn es meistens wahr 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 Booleschen Wert mag es überdimensioniert sein, aber ich finde es sehr gut lesbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X