Programmcode verstehen >> Serial.println(status ? "EIN" : "AUS"); <<

Hallo Leute,

habe in einem Sketch eine Zeile entdeckt, die ich eigentlich ganz nützlich finde:

Serial.println(status ? "EIN" : "AUS");

'status' ist in diesem Fall eine Variable vom Typ boolean und falls 'true', wird EIN bzw. falls nicht, wird AUS ausgegeben. Kann Schreibarbeit im Vergleich zu einer if-Abfrage ersparen und sieht übersichtlicher aus.
Wird diese Abfrage mit dem Fragezeichen und Doppelpunkt irgendwo dokumentiert? Ich vermute mal, ist nichts Arduino spezielles aber weiß nicht, wie ich danach suchen soll...

Mich würde interessieren, ob es noch weitere Möglichkeiten gibt oder ob ich das auch irgendwie ohne die println-Ausgabe nutzen kann?

Den Konditional-Operator oder Bedingungs-Operator sieht man recht selten:
http://www.imb-jena.de/~gmueller/kurse/c_c++/c_operbd.html

Ich habe den auch schon benutzt um einfach ein if-else so kompakt wie möglich zu machen, damit der Source Code nicht unnötig aufgebläht wird.

Geht natürlich auch ohne println(). z.B. für Zuweisungen auf Variablen. Oder wie man im ersten Link am Ende sieht, bei der Definition von Makros.

Super, danke für die schnelle Antwort.
Google bringt eben nur was, wenn man weiß, wonach man suchen muß XD

Spexx:
Super, danke für die schnelle Antwort.
Google bringt eben nur was, wenn man weiß, wonach man suchen muß XD

Ja, die Welt ist einfach manchmal ungerecht :wink: :wink: :wink: :wink: :wink:
Diese Schreibform gibt es übrigens auch in PHP.

Grüße Uwe

Dieses Konstrukt gibt es in einigen Sprachen:
Ternary conditional operator - Wikipedia (grr. Das Forum hat erst den Doppelpunkt nicht korrekt geparst und den Link versaut)

Oft aber auch in anderer Form mit einer if-else Variante wie in Python oder Delphi

Etwas ähnliches ist das hier:

Google bringt eben nur was, wenn man weiß, wonach man suchen muß

Stimmt, aber "Fragezeichen Operator" hätte dich zum Ziel geführt :slight_smile:

Serenifly:

Google bringt eben nur was, wenn man weiß, wonach man suchen muß

Stimmt, aber "Fragezeichen Operator" hätte dich zum Ziel geführt :slight_smile:

Das Wort "aber" verstehe ich nicht. :wink:

Das Schöne an
** ** (x) ? (t) : (f);** **

ist, dass t und f alle möglichen Datentypen sein können.

Serenifly:
... "Fragezeichen Operator" hätte dich zum Ziel geführt :slight_smile:

Darauf muß man erst kommen. Ich wäre nicht auf dieses Suchargument gekommen.
Grüeß Uwe