Home > Informatik > Stufe EF > Lernbausteine

Logische Bedingungen

Einfache Beispiele

Logische Bedingungen tauchen in der Entwicklung von Software immer wieder auf. In der Programmiersprache Java finden wir sie hauptsächlich in if- bzw. if-else-Bedingungen und in Schleifen (while, for). Hier ein paar einfache Beispiele.

Beispiel 1
if (x < 10) x++;

Da sich dieser Lernbaustein hauptsächlich an Anfänger richten, werden ich den Befehl mal recht ausführlich erläutern.

In diesem Befehl wird die logische Bedingung

x < 10

ausgewertet. Eine logische Bedingung ist entweder wahr (true) oder falsch (false). Das hängt ganz davon ab, welchen Wert die Variable x gerade hat. Wenn x beispielsweise den Wert 7 hat, dann ist die logische Bedingung wahr, denn 7 ist ja kleiner als 10. Hat x den Wert 10, so ist die Bedingung falsch, denn 10 ist nicht kleiner als 10, sondern genau so groß. Hat x den Wert 11, ist die Bedingung natürlich falsch, darüber müssen wir hier gar nicht diskutieren.

In der Sprache Java werden logische Bedingungen in runde Klammern gesetzt. Eine Anweisung wie

if x < 10 x++;

wäre also syntaktisch falsch, weil hier die runden Klammern fehlen.

Eine if-Anweisung benötigt immer eine logische Bedingung in den Klammern. Die Anweisung

if ( ) x++;

wäre also falsch, weil hier keine logische Bedingung definiert ist.

Beispiel 2
if (xPosition + durchmesser < 490)
   xPosition += 10;

Hier sieht die logische Bedingung schon etwas komplizierter aus. Es wird gefragt, ob die Summe aus dem Wert der Variable xPosition und dem Wert der Variable durchmesser kleiner als 490 ist. Ist diese Bedingung erfüllt, wird xPosition um 10 Einheiten erhöht.

Komplexere Bedingungen

Beispiel 3

Wir wollen wissen, ob sich ein Graphikobjekt in der linken oberen Ecke der Zeichenfläche einer Java-Anwendung aufhält. Dabei definieren wir "links oben" folgendermaßen: Die x-Koordinate des Objektes soll kleiner als 50 sein, und die y-Koordinate ebenfalls. Hier müssen also zwei Bedingungen gleichzeitig überprüft werden. In Java geht das dann so:

if ((xPos < 50) && (yPos < 50)) ...

Der logische UND-Operator && verknüpft die beiden logischen Bedingungen

xPos < 50

und

yPos < 50

zu einer neuen logischen Bedingung. Nur wenn beide Bedingungen wahr sind, ist auch die Gesamtbedingung wahr - so ist das eben bei einer UND-Verknüpfung. Jede der beiden Bedingungen steht in einem Klammerpaar. Warum das Klammern der einzelnen Bedingungen notwendig ist, kann man schön an arithmetischen Ausdrücken erklären: Was ist der Unterschied zwischen den beiden folgenden Ausdrücken?

3 + 4 * 5

und

(3 + 4) * 5

Im ersten Fall ist das Ergebnis 23, im zweiten Fall 35. Punktrechnung geht vor Strichrechnung. Wenn man also erst 3 und 4 addieren und das Ergebnis mit 5 multiplizieren will, muss man den Ausdruck

3 + 4

in Klammern setzen. Bei logischen Bedingungen ist das ähnlich. Der UND-Operator && hat eine ähnlich hohe Priorität wie der Multiplikations-Operator. Würde man einfach schreiben

if (xPos < 50 && yPos < 50)

dann würde zuerst die Bedingung

50 && yPos

geprüft, was hier natürlich zu einem Fehler führen würde, weil man zwei Zahlen nicht logisch verknüpfen kann.

Selbst dann, wenn eine solche Klammerung nicht notwendig ist, erhöht sie auf jeden Fall die Übersichtlichkeit des Ausdrucks und macht ihn besser lesbar und wartbar. Die Wartbarkeit von Quellcode ist eine wichtige Sache, wenn man mal Jahre später Veränderungen an seinem eigenen Quellcode vornehmen möchte.

Logische Operatoren

Mit dem UND-Operator && kann man zwei logische Bedingungen verknüpfen, nur wenn beide true sind, ist auch das Gesamtergebnis true. Auch mit dem ODER-Operator || lassen sich zwei Bedingungen verknüpfen. Das Gesamtergebnis ist true, wenn eine oder beide Bedingungen true sind. Schließlich gibt es noch den NICHT-Operator !. Damit kann man Bedingungen wie !(xPos < 50) definieren. Ist xPos kleiner als 50, liefert diese Bedingung den Wert false.