Wie arbeitet der ternäre Operator?

7

Bitte demonstrieren Sie, wie der ternäre Operator mit einem regulären if / else-Block arbeitet. Beispiel:

%Vor%

Genaue Duplikate: Wie benutze ich die ternärer Operator?

    
Sara S 20.01.2009, 21:18
quelle

12 Antworten

27
%Vor%     
Kent Fredric 20.01.2009, 21:19
quelle
15

Der Unterschied zwischen der ternären Operation und if / else besteht darin, dass der ternäre Ausdruck eine Anweisung ist, die zu einem Wert ausgewertet wird, während if / else nicht.

ist

Um Ihr Beispiel zu verwenden, indem Sie von der Verwendung eines ternären Ausdrucks zu if / else wechseln, können Sie diese Anweisung verwenden:

%Vor%

In diesem Fall ist Ihre Aussage jedoch äquivalent:

%Vor%     
Dan Monego 20.01.2009 21:25
quelle
9

Als ich neu in C ++ war, fand ich, dass es half, dieses Konstrukt wie folgt zu lesen:

%Vor%

(Beachten Sie, dass dies kein gültiger Code ist. Es ist genau das, was ich selbst gelernt habe, um in meinem Kopf zu lesen.)

    
Konrad Rudolph 20.01.2009 21:21
quelle
5
%Vor%     
empi 20.01.2009 21:20
quelle
4
%Vor%     
user54650 20.01.2009 21:19
quelle
4

Ich war nie ein Fan des ternären Betreibers, weil ich dachte, es sei schwer zu lesen. Jon Skeet und sein Buch C # in Depth schlugen schließlich diesen alten Hund über den Kopf und ließen ihn untergehen. Jon sagte, und ich paraphrasiere, halte es für eine Frage.

  

Wert & gt; 100?

     

"ja": "nein"

Jetzt können die Blinden sehen.

Hoffe, das hilft dir, es zur zweiten Natur zu machen.

    
billb 20.01.2009 21:40
quelle
2

Wie auf der ?: Operator MSDN-Seite angegeben, " Der bedingte Operator (? :) gibt abhängig vom Wert eines booleschen Ausdrucks einen von zwei Werten zurück. "

Sie können also den ternären Operator verwenden, um mehr als nur boolesche Werte zurückzugeben:

%Vor%     
Craig 20.01.2009 21:30
quelle
1

PHP Beispiel

%Vor%
  

"Der Ausdruck (expr1)? (expr2): (expr3) ergibt expr2 , wenn expr1 zu TRUE und expr3 , wenn expr1 zu FALSE ausgewertet wird. "

PHP-Dokumentation zu Vergleichsoperatoren

    
Sampson 20.01.2009 21:19
quelle
1

Stellen Sie sicher, dass Sie keine Typen in echten / falschen Teilen in Java mischen. Es erzeugt seltsame Ergebnisse: - (

    
Peter Štibraný 21.01.2009 19:07
quelle
1

Schlechtes Beispiel, weil Sie einfach

schreiben könnten %Vor%

als:

%Vor%

Darüber hinaus hat jeder andere bereits darauf geantwortet. Ich würde nicht empfehlen, ternäre Operatoren zu verwenden, um Bool-Werte zu setzen, da das, was Sie auswerten, bereits ein boolescher Wert ist.

Ich weiß, es war nur ein Beispiel, aber es war es wert, darauf hingewiesen zu werden.

    
Brian Rudolph 21.01.2009 19:03
quelle
1

Andere haben es bereits beantwortet, aber hier ist eine Sache, die Sie wirklich über die Verwendung von ternary wissen sollten, und damit meine ich, tu es nie.

Nehmen wir an, Sie haben ein Stück Code, das für jede mögliche Variation eines Wertes ein anderes Objekt zurückgeben soll, sagen wir vereinfachend eine ganze Zahl zwischen 1 und 5. Ihr Code sieht so aus:

%Vor%

Es ist leicht zu verstehen, aber ein bisschen schwer. Da ternary nur eine andere Möglichkeit ist, eine if..else-Anweisung zu schreiben, die auf diese Weise refactored werden kann

%Vor%

Es heißt verschachteltes Ternär . Es ist böse, jetzt, wo du davon weißt, bitte benutze es nie. Es mag scheinen, seine Verwendungen wie der oben genannte Fall zu haben, aber es ist sehr wahrscheinlich, dass Sie in echten Lebenssituationen es irgendwo verwenden müssen, wo es Lesbarkeit verliert (denken Sie das Ändern von Konfigurationen mit variabler Menge von Parametern und so).

Bonus-Sektor: Setzen Sie niemals Attributwerte in if (), sehen Sie sich einfach folgendes an: if(bool=true!=false) { .. }

    
Esko 21.01.2009 20:02
quelle
0

Wie von MSDN zitiert (in einem früheren Post notiert)

string result = (Wert & gt; 100)? "Wert ist groß": "Wert ist klein";

Kann wie folgt gelesen werden:

Ist der Wert größer als 100? Wenn ja, ist string result "Wert ist groß", wenn nein, string ergibt sich "Wert ist klein".

    
Matt 16.03.2009 15:35
quelle

Tags und Links