Bedingter Operator in Coffeescript


74

Das gefällt mir wirklich gut:

var value = maxValue > minValue ? minValue : maxValue;

Gibt es etwas ebenso Prägnantes in Coffescript?


8
Vielen Dank, dass Sie es nicht "den ternären Operator" nennen.
— Mark Wilden

4
@ MarkWilden warum sollte er nicht? Es ist eine etablierte Amtszeit
— Stephan

1
Wenn Sie nach einem ternären Operator für Coffescript suchen, finden Sie ihn sofort.
— William.eyidi

@MarkWilden: Du hast 5 Upvotes, also scheinen einige Leute dir zuzustimmen, aber würdest du bitte erklären, warum?
— Zaz

3
"Das Problem mit 'dem ternären Operator' ist, dass es beschreibt, wie es aussieht, nicht was es tut. " - Eric Lippert, blogs.msdn.com/b/ericlippert/archive/2010/02/18/… (in die Kommentare)
— Joe White

Antworten:


140
value = if maxValue > minValue then minValue else maxValue

10
Sie können dies auch tun: value = `maxValue > minValue ? minValue : maxValue`
— Peter Krnjevic

1
@PeterKrnjevic: Vielleicht möchten Sie Ihren Kommentar in eine Antwort ändern :) Bei gleicher Anzahl von Zeichen, aber meiner Meinung nach weniger lesbar, funktioniert dies auch: stackoverflow.com/a/23915351/750216
— Răzvan Flavius ​​Panda

1
Wenn Sie denken, die richtige Lösung ist:value = Math.min minValue, maxValue
— Raskhadafi

Okay, wie schreibt man das jetzt in mehreren Zeilen? Eine andere Möglichkeit als die Verwendung des Zeilenfortsetzungszeichens ``?
— Jimasun

21

Es gibt eine weitere knappe Option sowohl in Javascript und Coffeescript :)

value = Math.min(minValue, maxValue)

12
in Kaffee , value = Math.min minValue, maxValue;)
— v42

4
Ich glaube nicht, dass sich die Frage auf den tatsächlichen Inhalt bezog, sondern auf die Fähigkeit, alles in einer Zeile zu erledigen. Könnte aber falsch sein.
— LasagneAndroid

1
Falsch, da es die Frage nicht anspricht. Das OP fragt Conditional operator in Coffeescriptnach dem JSBeispiel und wie man es schreibt . Es ist nur ein Beispiel und hat nichts mit dem eigentlichen Syntaxproblem zu tun.
— Jimasun

12

Wie Răzvan Panda betont, könnte mein Kommentar tatsächlich eine der besseren Antworten sein:

value = `maxValue > minValue ? minValue : maxValue`

Welche Funktion haben die Anführungszeichen in Ihrer Codezeile?
— Mathieu Brouwers

Die Backticks bewirken, dass die Zeile vor der Zuweisung ausgeführt wird.
— Peter Krnjevic

10

Dies ist ein Fall, in dem es sich anfühlt, als hätte CoffeeScript konkurrierende Philosophien:

  1. Sei präzise
  2. Sei nicht überflüssig

Da alle Operationen ein Ergebnis zurückgeben, gibt Ihnen die if / then / else-Vorgehensweise das, was Sie benötigen. Das Hinzufügen des Operators? /: Ist redundant.

Hier wünschte ich mir, sie würden uns den ternären Operator? /: Geben, obwohl er redundant ist ... er liest sich einfach besser als die if / then / else-Variante.

Nur mein 2c.


20
Es gibt keine Möglichkeit, das a ? b : cTernär in CoffeeScript ohne Mehrdeutigkeit zu haben, da a ? bes eine Bedeutung hat (" awenn es nicht null ist, bsonst) und b: cauch eine ( {b: c}).
— Trevor Burnham

3

Sie können es so schreiben:

value = if maxValue > minValue then minValue else maxValue

Es wird wie Ihr Code kompiliert.


3

Unten ist die Tatsache:

In der Dokumentation gibt es einen Abschnitt mit dem Titel "Bedingungen, Ternäre und bedingte Zuweisung" . Dies lässt vermuten, dass Coffeescript unterstützt

condition ? when-true : when-false 

aber in der Tat nicht.

Unten finden Sie Informationen zu dem Patch, mit dem dieses Problem behoben werden kann

Hier ist der Patch (und er wird an coffeescript.org gesendet ):

http://github.com/jashkenas/coffee-script/commit/ec2d358ae3c82e9888c60695d7cce05edde0c55a

Beispiele:

mood = greatlyImproved if singing

if happy and knowsIt
  clapsHands()
  chaChaCha()
else
  showIt()

date = if friday then sue else jill

options or= defaults

2
if then else ist eine ternäre Operation, sie hat nur eine andere Syntax.
— Ricardo Tomasi

im Kaffeeskript, wenn die Anweisung else in einer einzeiligen Anweisung geschrieben ist.
— Siva Charan

1
Was ich damit gemeint habe ist, dass eine ternäre Operation als eine Operation mit drei Elementen definiert ist . Eine einzeilige if then elseAnweisung wird als ternär klassifiziert . Der korrekte Begriff für den "ternären" Operator in Javascript ist ohnehin ein bedingter Operator .
— Ricardo Tomasi

-1
value = maxValue > minValue && minValue || maxValue

Dies ist eigentlich nicht korrekt, überprüfen Sie die Kommentare.


1
Dies gibt keine Antwort auf die Frage. Um einen Autor zu kritisieren oder um Klarstellung zu bitten, hinterlassen Sie einen Kommentar unter seinem Beitrag.
— PlasmaHH

@PlasmaHH: Dies ist eine gültige Antwort, nur ein wenig weniger lesbar.
— Răzvan Flavius ​​Panda

1
@ RăzvanPanda Nein, es ist keine gültige Antwort, da es etwas anderes tut als angefordert und der Unterschied in der Antwort nicht beschrieben / dokumentiert ist. Z.B. Wenn minValuegleich 0und maxValuegleich 5, dann maxValue > minValue ? minValue : maxValuewürde zurückkehren 0, während zurückkehren maxValue > minValue && minValue || maxValuewürde 5.
— pepkin88

@ pepkin88: Das ist richtig, diese Antwort funktioniert nicht, wenn ein falscher Wert für minValue übergeben wird und die Bedingung wahr ist.
— Răzvan Flavius ​​Panda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.