Zauberei mit Wahrheiten

Haben Sie manchmal auch das Gefühl, dass ihre Kollegen Angst vor boolschen Ausdrücken haben? So mancher scheint die De Morganschen Gesetze wie die dunklen Zauberkünste einer Morgan le Fay zu fürchten.

So bleiben dann auch Ausdrücke, wie der folgende, für Ewigkeiten im Programmcode.

!(color != BLACK && color != WHITE) || color == WHITE

Häufige verweisen die Entwicklern auf den Optimierungen des Compilers, wenn sie ihre boolschen Ausdrücke nicht vereinfachen. Warum etwas händisch versuchen, was der Compiler sehr viel besser kann?

In erster Linie geht es natürlich um die Wartbarbeit und Erweiterbarkeit des Sourcecodes, denn nicht jeder Entwickler mag logische Labyrinthe in Form von verschachtelten If Anweisungen und großer Ausdrücke in den Bedingungen. Und vielen Entwicklern fehlt auch einfach diese autistische Freude eines Sodoku Spielers beim Ausfüllen von Wahrheitstafeln um herauszufinden, was der Autor einer Methode eigentlich bewirken wollte.

Findet ein Entwickler nicht schnell heraus, was ein Konstrukt bewirkt, schaltet er sofort auf Plan B um und installiert seinen Code neben den ursprünglichen, hängt weitere If-Else-Kaskaden an die schon existierenden und etabliert damit das Lavafluß Anti-Platten in der Software.  Der Sourcecode bläht sich auf und niemand weiß mehr, was eigentlich alles dort drinnen passiert.

Regeln

Knapp formuliert lauten die De Morganschen Gesetze, eine negierte Und-Verknüpfung entspricht der Oder-Verknüpfung der negierten Werte und umgekehrt. Man kann boolsche Ausdrücke mit diesen Gesetzen mechanisch umformen und mit Hilfe weiterer boolscher Rechenregeln vereinfachen.

Die Wahrheit in der boolschen Algebra ist, wie der boolsche Ausdruck oben.

color == BLACK || color == WHITE