Laden...

Bitte Erklärung zu (...) ? ... : ... [Antwort: bedingte Bewertung]

Erstellt von Merkur76 vor 18 Jahren Letzter Beitrag vor 18 Jahren 22.449 Views
Merkur76 Themenstarter:in
104 Beiträge seit 2005
vor 18 Jahren
Bitte Erklärung zu (...) ? ... : ... [Antwort: bedingte Bewertung]

Hallo!

Kann mir jemand bitte mal den Sinn dieser Zeile erklären (bzgl. (), ?, : );

legend.Mode = (m_ShowLegendCheck.Checked) ? LegendMode.Automatic : LegendMode.Disabled;

Ist das sowas wie die Kurzform für eine If-Abfrage?

z.B.


if (m_ShowLegendCheck.Checked)
{
  LegendMode.Automatic;
}
else
{
  LegendMode.Disabled;
}

Falls dem so ist, wann sollte man diese Kurzform verwenden?
Bzw. was ist der Vorteil von diesem (ausser dem weniger Tippen)?

Vielen Dank im Voraus!

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)
1.271 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

Ich kann dir nur eine Antwort auf die erste Frage geben: Ja, du hast es richtig erkannt. Wenn der Wert vor dem Fragezeichen true ergibt, wird der Wert/die Anweisung links von dem Doppelpunkt benutzt, anderenfalls die rechte.

Gruß progger

A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee

Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Merkur76,

das ist eine bedingte Bewertung, also quasi ein if innerhalb eines Ausdrucks. Also keine Kurzform, ist schon auch ein bisschen was anderes. Ein if schreibt man (vereinfacht gesagt) außen um Ausdrücke rum, eine bedingte Bewertung schreibt man in einen Ausdruck.

herbivore

I
1.739 Beiträge seit 2005
vor 18 Jahren

?

Ternärer Operator(3 Operanden), Erbe von C "bedingter Ausdruck/ conditional Expression", hat die 2. niedrigste Priorität.
"?" ist deutlich kürzer als die alternative Schreibweise.

value = bExpression ? a : b
Schont die Finger, kann bei Verschachtelung allerdings unübersichtlich werden.

alternative Schreibe ist:

if(bExpression)
value = a;
else
value = b;

4.221 Beiträge seit 2005
vor 18 Jahren

Und im Gegensatz zu IIF in VB.Net wird auch nur der True oder der FalsePart evaluiert...



			int a=2;
			int b=1;
			int c=a-b-b;
			int d=0;

			try
			{
				d=c >0 ? a/c : 0;
			}
			catch (Exception ex)
			{
				System.Diagnostics.Debug.WriteLine(ex.Message);
			}
			MessageBox.Show(d.ToString());


c ist ja 0 also soll 0 zurückgegeben werden... in C# funzt dies perfekt.

Bei VB kracht es, da a \ c evaluiert wird obwohl ja der Wert aus dem False-Part gezogen werden sollte.



        Dim a As Integer = 2
        Dim b As Integer = 1
        Dim c As Integer = a - b - b
        Dim d As Integer = 0

        Try
            d = CType(IIf(c > 0, a \ c, 0), Integer)
        Catch ex As Exception
            System.Diagnostics.Debug.WriteLine(ex.Message)
        End Try

        MessageBox.Show(d.ToString())



PS: Bitte keine Kommentare über VB in diesem Thread 🙂 mein Post war rein sachlich gemeint 🙂

Gruss
Programmierhans

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

4.207 Beiträge seit 2003
vor 18 Jahren

Wann man ❔ benutzen sollte? IMHO gar nicht, da es nicht zur Übersichtlichkeit beiträgt, sondern den Quellcode kryptischer und schlechter lesbar macht.

IMHO ein (unnötiges) Überbleibsel aus der C++-Welt.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

I
1.739 Beiträge seit 2005
vor 18 Jahren

älter: C,
auch Sache der Quellcodeformatierung( manchmal doch Übersichtlicher als verschachtelten if-else-if-else-if). Nicht notwendig, manchmal ok(sollte nicht die Regel werden, die Kunst liegt in der selektiven Anwendung(selten))

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Der Eisbär,

also ich benutze die bedingte Bewertung sehr selten, aber wenn ich sie benutze, finde ich es immer sehr praktisch und leichter lesbar.

Ich sehe sie jedenfalls als aktiven Teil der Sprache an.

Statt

i = (i > 0) ? i - 1 : i + 1

würde ich auch eher schreiben:


if (i > 0) {
   --i;
} else {
   ++i;
}

Aber in


Console.WriteLine ("{0} {1} {2}", obj1 != null ? obj1.ToString () : "<null>",
                                  obj2 != null ? obj2.ToString () : "<null>",
                                  obj3 != null ? obj3.ToString () : "<null>");

finde ich bedingte Bewertung schon sehr praktisch.

herbivore

I
1.739 Beiträge seit 2005
vor 18 Jahren

@herbivore:
gute Demo.

Merkur76 Themenstarter:in
104 Beiträge seit 2005
vor 18 Jahren
Vielen Dank!

Vielen Dank euch ALLEN für die ausführlichen Erklärungen! =)

Gruß Merkur76

=) Wir leben alle unter dem gleichen Sternenhimmel, haben aber nicht alle den gleichen Horizont. =)