Lektion 17:Logische AusdrückeDas ist der Fall, wenn die Jahreszahl durch 4 teilbar ist, aber wenn sie durch 100 teilbar ist, dann nicht, außer wenn sie durch 400 teilbar ist. 1995: kein Schaltjahr 1996: Schaltjahr 1900: kein Schaltjahr 2000: Schaltjahr Eine mögliche Implementierung ist:
Das ist die fast direkte Übersetzung der obigen Definition. Deshalb ist sie gut. Die obige Definition kommt noch als Kommentar herein und jeder versteht die Funktion. Man kann solche komplexen Bedingungen aber auch mit logischen Ausdrücken formulieren (und oft sollte man es): Werte vom Typ bool können mit den Operatoren && (logisches und), ¦¦ (logisches oder) und ! (logisches nicht) verknüpft werden. Damit können wir uns eine kleine Funktion basteln, die sagt, ob ein bestimmtes Jahr ein Schaltjahr ist: Der Ausdruck a&&b ist nur dann true, wenn a==true und b==true. Der Ausdruck a¦¦b ist true, wenn a==true oder b==true (auch, wenn beide gleich true sind). Der Ausdruck !a ist genau dann true, wenn a false ist. Ausdruck: a&&b (logisches und) -------------------------- a ¦ b ¦ Ergebnis -------------------------- true ¦ true ¦ true false ¦ true ¦ false true ¦ false ¦ false false ¦ false ¦ false Ausdruck: a¦¦b (logisches oder) -------------------------- a ¦ b ¦ Ergebnis -------------------------- true ¦ true ¦ true false ¦ true ¦ true true ¦ false ¦ true false ¦ false ¦ false Ausdruck: !a (logisches nicht) ------------------ a ¦ Ergebnis ------------------ true ¦ false false ¦ true
Und wir haben mit Sicherheit erreicht, daß der Code schwierig zu lesen ist. Besonders in Bedingungen kommt es zu wahren Meisterschaften des Rätselaufgebens, obwohl es oft viel einfacher ginge. Bedingung unschön: Bedingung schön: if(0<=a-b) if(a<=b) if(a/b>1) if(a>b) // es war hier klar, daß a>0&&b>0 if(5<=a) if(a>=5) if(a>=5 ¦¦ a<=7) if(true) // und if(true) fällt ganz weg Nach langem Rätseln konnte ich mich mit folgender istSchaltjahr-Funktion am ehesten anfreunden:
Die return-Befehle sind nicht korrekt eingerückt. Aber dem Compiler macht das nichts, und ich finde es hübsch, weil es die gleichartige Struktur dieser Zeilen deutlich zur Geltung bringt. Für Freunde des Wortes else:
Einsendungen:logische Ausdrücke besser als if?short-cirquit-Auswertung? Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern. [aktuelle Version] [inhalt] [index] [Fehlerkorrektur, Verbesserungsvorschlag] © Volkard Henkel <volkard@normannia.de>, last update: 08/25/00 |