Warum ist die If-Anweisung kein Ausdruck

Hallo zusammen,

ein Ausdruck ist doch ein syntaktisches Konstrukt, dass ausgewertet werden kann, also einen Wert liefert.
Die If-Anweisung wertet doch eine Bedingung aus und liefert dann true oder false zurück.
Hier hätten wir also auch eine Auswertung und einen Wert, der zurückgegeben wird.

Warum ist sie dann trotzdem kein Ausdruck?

THX im voraus.

ein Ausdruck ist doch ein syntaktisches Konstrukt, dass
ausgewertet werden kann, also einen Wert liefert.

nicht wirklich. einen „wert liefern“ tut nur eine funktion. ein asudruck kann analog einem term in der mathematik zu einem wert ausgewertet werden.

Die If-Anweisung wertet doch eine Bedingung aus und liefert
dann true oder false zurück.

nö, macht sie nicht, sie wertet die bedingung aus, und fuehrt dann den zugehoerigen anweisungsblock aus, oder eben nicht. mit zurueckgeben ist da nix.

Hallo

ein Ausdruck ist doch ein syntaktisches Konstrukt, dass
ausgewertet werden kann, also einen Wert liefert.
Die If-Anweisung wertet doch eine Bedingung aus und liefert
dann true oder false zurück.
Hier hätten wir also auch eine Auswertung und einen Wert, der
zurückgegeben wird.

„If“ ist eine „Steuerflussanweisung“,
kann aber u.U. Teil eines Ausdrucks sein.

Was genau möchtest Du mit if anstellen,
was nicht klappt?

Grüße

CMБ

Danke für die Antworten,

bei mir klappt alles mit der If-Bedingung. Mir war nur nicht ganz klar, warum sie kein Ausdruck ist.

Aber jetzt habe ich es verstanden.

THX

„If“ ist eine „Steuerflussanweisung“,
kann aber u.U. Teil eines Ausdrucks sein.

hast du ein beispiel parat?

Hallo dog.je

„If“ ist eine „Steuerflussanweisung“,
kann aber u.U. Teil eines Ausdrucks sein.

hast du ein beispiel parat?

Im Prinzip sollte das in
allen Sprachen gehen, die
‚code assertions‘ in Expressions
wie textmustern usw. zulassen.

IIRC geht das auch in PHP, in
Perl (wo ich mich besser auskenne)
sieht das ungefähr so aus,
z.B. grep EXPR, LIST

suche alle Zahlen von 1…100,
in denen das Bitmuster von 0A-Hex
vorkommt, mit der EXPRESSION-Form
von grep:

 $mask = 0xA;
 @bitsok = grep /(??{if( ($\_ & $mask) == $mask ){$\_} else{0} })/, 1..100;

Ok, das ist ein etwas konstruiertes
Beispiel, es gibt hier Idiome, die
mit einem „impliziten if“ auskommen, z.B.:

 @bitsok = grep { ($\_ & $mask) == $mask } 1..100;

also die block{}-Form von grep.

Grüße

CMБ