Frage

Bitte zeigen, wie der ternäre Operator mit einem normalen if / else-Block funktioniert. Beispiel:

Boolean isValueBig = value > 100 ? true : false;

Genaue duplizieren: Wie verwende ich die ternärer Operator?

War es hilfreich?

Lösung

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}

Andere Tipps

Der Unterschied zwischen dem ternären Betrieb und wenn / sonst ist, dass der ternäre Ausdruck ist eine Aussage, die auf einen Wert auswertet, während, wenn / sonst nicht.

Ihr Beispiel zu verwenden, die aus der Verwendung eines ternären Ausdruck Wechsel auf, wenn / sonst könnten Sie diese Anweisung verwenden:

Boolean isValueBig = null;
if(value > 100)
{ 
    isValueBig = true 
}
else
{
    isValueBig = false;
}

In diesem Fall aber Ihre Aussage entspricht dies:

Boolean isValueBig = (value > 100);

Als ich neu in C ++, ich fand, dass es geholfen, dieses Konstrukt wie folgt lauten:

Boolean isValueBig = if condition ? then x else: y;

(Beachten Sie, dass dies nicht gültigen Code. Es ist genau das, was ich mir angewöhnt in meinem Kopf zu lesen.)

Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}
Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }

Ich war nie ein Fan des ternären Operators, weil ich dachte, es war schwer zu lesen. Wie es so geschieht, Jon Skeet und sein Buch C # in Depth endlich auf diesen alten Hund über den Kopf und bekamen es zu sinken in. Jon gesagt, und ich paraphrasiere denkt, es als eine Frage.

  

Wert> 100

     

"Ja": "nein"

Jetzt können die Blinden sehen.

Hope dies hilft Ihnen, es zur zweiten Natur zu machen.

Wie aus dem : Operator MSDN-Seite „der Bedingungsoperator (? :) gibt einen von zwei Werten auf dem Wert eines booleschen Ausdrucks abhängig.“

So ermitteln Sie den ternären Operator verwenden können mehr zurück als nur Boolesche Werte:

   string result = (value > 100 ) ? "value is big" : "value is small";

PHP-Beispiel

<?php

  // Example usage for: Ternary Operator
  $action = (empty($_POST['action'])) ? 'default' : $_POST['action'];

  // The above is identical to this if/else statement
  if (empty($_POST['action'])) {
    $action = 'default';
  } else {
    $action = $_POST['action'];
  }

?>
  

"Der Ausdruck (expr1) (expr2): (expr3) ausgewertet expr2 , wenn ausdr1 wertet TRUE und expr3 , wenn ausdr1 wertet false . "

PHP Dokumentation auf Vergleichsoperatoren

Stellen Sie sicher, Sie Typen nicht in Wahr / Falsch-Teile in Java mischen. Es produziert seltsame Ergebnisse: - (

Bad Beispiel, weil Sie leicht schreiben könnte

Boolean isValueBig = value > 100 ? true : false;

als:

bool isValueBig = value > 100

Darüber hinaus werden alle anderen hat bereits beantwortet sie. Ich würde einfach nicht mit ternären Operatoren empfehlen Bool Werte zu setzen, da das, was Sie auswerten ist bereits ein boolescher Wert.

Ich weiß, es ist nur ein Beispiel, aber es war erwähnenswert,.

Andere haben es bereits beantwortet, aber hier ist eine Sache, die Sie wirklich über ternäre die Verwendung wissen sollte, und damit meine ich nicht tun immer es.

Nehmen wir an, dass Sie ein Stück Code haben, die angeblich ein anderes Objekt für jede mögliche Variation von einigem Wert zurückzukehren, lässt für simpliticy willen sagen, eine ganze Zahl zwischen 1 und 5. Der Code sieht wie folgt aus:

if(i==1) {
    return new ObjectOne();
} else if(i==2) {
    return new ObjectTwo();
} else if(i==3) {
    return new ObjectThree();
} else if(i==4) {
    return new ObjectFour();
} else if(i==5) {
    return new ObjectFive();
} else {
    return new DefaultObject();
}

Es ist leicht zu verstehen, aber ein bisschen schwer. Da ternäres ist nur ein weiterer Weg, um eine if..else Aussage des Schreibens , die zu diesem Refactoring werden kann

return (i==1) ? new ObjectOne() :
       (i==2) ? new ObjectTwo() :
       (i==3) ? new ObjectThree() :
       (i==4) ? new ObjectFour() :
       (i==5) ? new ObjectFive() : new DefaultObject();

Es heißt geschachtelte ternäre . Es ist böse, jetzt, dass Sie wissen es nie es bitte benutzen. Es mag scheinen, seine Verwendungen oben wie in den Fall zu haben, aber es ist sehr wahrscheinlich, dass in realen Situationen Sie es irgendwo verwenden müßten, wo es die Lesbarkeit (Konfigurationen mit variabler Menge von Parametern und so denken zu verändern) verliert.

Sektor Bonus: Nie Attributwerte innerhalb if () gesetzt, nur Blick auf diese: if(bool=true!=false) { .. }

Wie aus MSDN zitiert (in einem frühen Post angegeben)

string result = (Wert> 100)? „Wert ist groß“: „Wert ist klein“;

Könnte als gelesen werden:

Ist-Wert größer als 100? Wenn ja, string Ergebnis „Wert ist groß“, wenn nein, String Ergebnis „Wert ist klein“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top