PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Komma Operator im If Block


mekakic
2009-11-10, 15:07:45
Ich habe gerade eine halbe Stunde damit verbracht ein Stück Code anzuschreien und habe nicht verstanden oder gesehen was da falsch lief.

Ich wollte mit einer Methode "getBool" einen Wahrheitswert aus einer Konfiguration auslesen, und dann abhängig davon etwas machen. Die Methode hat einen optionalen DefaultParameter, falls der KeyValue nicht gelesen werden kann. Sowas wollte ich machen:
if ( config.getBool("keyValue", false) )
{
//...
}
Was ich aber getan habe war dies:
if ( config.getBool("keyValue"), false )
{
//...
}Von nun an habe ich mich gewundert, was dort falsch läuft und mehrfach die Konfigurationsdateien und den Parsercode überprüft, da war aber alles richtig und nach etwas über einen halbe Stunde habe ich dann gesehen, dass mit dort die Klammer verrutscht ist und was im Endeffekt im If Block stand war folgendes:
if ( true, false )
{
//...
}:uhammer2:
Wie wird das ausgewertet, hier offentsichtlich zu false, aber auch generell nur der letzte Wert und was soll das überhaupt? Was könnte man damit sinnvoll ausdrücken?

huha
2009-11-10, 15:15:34
and.

-huha

fezie
2009-11-10, 17:08:50
http://en.wikipedia.org/wiki/Comma_operator

In einer for () schleife zum Beispiel nützlich mit sowas wie
for (i = 0, j = 0; i < x && j< y; i++, j++)

Gast
2009-11-10, 18:13:03
damit ist zB sowas möglich:

type1 a;
type2 b;

a = init(&b), process(b);

braucht man aber kaum je, ist schwer lesbar und von daher findet man es kaum wo. Ausnahme sind die bereits erwähnten fors.

mfg,
zgep

Neomi
2009-11-10, 19:39:37
braucht man aber kaum je, ist schwer lesbar und von daher findet man es kaum wo. Ausnahme sind die bereits erwähnten fors.

Man "braucht" das grundsätzlich nie, ebensowenig wie for-Schleifen, die ja auch bloß entsprechend verpackte while-Schleifen sind oder generell Konstrukte, die man auch mit bedingten goto-Befehlen nachbilden kann. Bei for-Schleifen und anderen Konstrukten sind die Vorteile bei richtiger Nutzung (bessere Lesbarkeit, geringere Fehleranfälligkeit) offensichtlich. Beim Komma-Operator nicht, weil man nicht so viele sinnvolle Fälle konstruieren kann. Trotzdem gibt es genau diese Vorteile bei ebenfalls richtiger Nutzung auch da. Und das Beispiel in der for-Schleife ist nicht die Ausnahme, sondern eine Ausnahme.

Coda
2009-11-10, 21:26:04
and.
Ne. Es wird der letzte Wert genommen.

true, false, true = true

Grey3
2009-11-11, 00:57:03
Ich würde aber sagen so etwas ist grundsätzlich schlechter Stil, da sehr unbekannt.