Ziemlich oft bekommt man solchen Code zu sehen:
Eigentlich nicht weiter dramatisch, tut was es soll, nur wird daran deutlich, dass der Autor ein paar Verständnis-Lücken im Bereich Boolean, Vergleichen und Code-Verzweigungen aufweist.
Was ist ein Boolean?
Boolean ist ein Datentyp, der eine Bedingung ausdrückt. Ein Boolean kann als Wert nur eine von 2 Konstanten aufweisen:
Und dieser Datentyp hat eine besondere Besonderheit:
Was macht ein Vergleichs-Operator?
Der führt eine Rechnung durch, deren Ergebnis vom Typ
Was ist nun falsch daran, auf diese Weise bedingt zu verzweigen?Wie gesagt: ist nicht falsch, zeigt aber einen Fehlschluss des Autors, der offenbar denkt, ohne Vergleichs-Operator könne er keine Bedingung formulieren.
Kanner doch, denn
Und diese Bedingung nun nochmal mit
"Richtig" formuliert reicht also:Die "falsche" Formulierung ist wie "gestelztes Deutsch":
"Wenn es wahr ist, dass die Checkbox gecheckt ist..." statt einfach: "Wenn die Checkbox gecheckt ist..."
Liegt ein Wert vom Typ
Ein Vergleichsoperator ist halt ein Operator - der rechnet was aus. Macht nur Sinn, wenn ein Boolean nicht direkt vorliegt, sondern auszurechnen ist (etwa aus 2 Integer):
Klar Soweit?
Aber auch nach Korrektur ist das immer noch Unfug:Denn
Da braucht man doch keine Verzweigung zu schreiben, wenn dieser Boolean denselben Wert bekommen soll wie
Sondern kurz und schmerzlos:
Um einem
Man kann einem Boolean auch logische Ausdrücke zuweisen, denn ein boolscher Ausdruck ergibt immer einen
Übrigens ist
Jeder hats gemerkt: Schleifen-Konstrukte sind auch bedingte Verzweigungen - Ausnahme: das un-bedingte
Wobei bei den For-Schleifen die Bedingung fest eingebaut ist - nur die Schlüsselworte Until und While erwarten explizit einen Boolean
Hier nochmal kleines Falsch-Richtig-Sample auch für Schleifen:
Beachte, dass man statt eines
Also nochmal die 3 Merksätze
4.Vergleiche mit den Konstanten
Beim Vergleich mit
Beim Vergleich mit
Was ist ein Boolean?
Boolean ist ein Datentyp, der eine Bedingung ausdrückt. Ein Boolean kann als Wert nur eine von 2 Konstanten aufweisen:
True
oder False
Und dieser Datentyp hat eine besondere Besonderheit:
Boolean
ist der Datentyp, mit dem bedingte Programm-Verzweigungen codiert werden - einen anderen Datentyp gibts dafür nicht.Was macht ein Vergleichs-Operator?
Der führt eine Rechnung durch, deren Ergebnis vom Typ
Boolean
istWas ist nun falsch daran, auf diese Weise bedingt zu verzweigen?Wie gesagt: ist nicht falsch, zeigt aber einen Fehlschluss des Autors, der offenbar denkt, ohne Vergleichs-Operator könne er keine Bedingung formulieren.
Kanner doch, denn
Checkbox.Checked
ist ein Boolean
- ist also bereits die Bedingung.Und diese Bedingung nun nochmal mit
True
zu vergleichen ist nur eine sinnlose Rechenoperation, bei der garantiert nichts neues rauskommt."Richtig" formuliert reicht also:Die "falsche" Formulierung ist wie "gestelztes Deutsch":
"Wenn es wahr ist, dass die Checkbox gecheckt ist..." statt einfach: "Wenn die Checkbox gecheckt ist..."
Liegt ein Wert vom Typ
Boolean
vor, so ist ein Vergleichs-Operator nicht erforderlich, um eine Bedingung zu formulieren. Der Boolean ist die Bedingung. (und der Vergleichsoperator ist die Bedingung nicht)Ein Vergleichsoperator ist halt ein Operator - der rechnet was aus. Macht nur Sinn, wenn ein Boolean nicht direkt vorliegt, sondern auszurechnen ist (etwa aus 2 Integer):
https://www.youtube.com/watch?v=wzKWBBKd7pw
Aber auch nach Korrektur ist das immer noch Unfug:Denn
Label1.Visible
ist ja auch ein Boolean
! Da braucht man doch keine Verzweigung zu schreiben, wenn dieser Boolean denselben Wert bekommen soll wie
CheckBox1.Checked
!Sondern kurz und schmerzlos:
Um einem
Boolean
-Member einen Wert zuzuweisen bedarf es keiner VerzweigungMan kann einem Boolean auch logische Ausdrücke zuweisen, denn ein boolscher Ausdruck ergibt immer einen
Boolean
(wer hätte das gedacht ) - paar Beispiele:VB.NET-Quellcode
- Dim a = 9, b = 13
- Label1.Visible = a > b 'Label1 nur sichtbar, wenn a größer als b ist
- 'Label1 unsichtbar, wenn beide Checkboxen gecheckt sind
- Label1.Visible = Not (CheckBox1.Checked AndAlso CheckBox2.Checked)
- 'boolsche Ausdrücke können beliebig komplex werden - ihr Ergebnis ist: Boolean - was sonst?
- Label1.Visible = a > b AndAlso Not (CheckBox1.Checked AndAlso CheckBox2.Checked)
Übrigens ist
If
nicht die einzige Programm-Verzweigung - weitere bedingte Verzweigungsformen sind: Select Case
, For Each
, For i
, While
, Do Loop Until / While
Jeder hats gemerkt: Schleifen-Konstrukte sind auch bedingte Verzweigungen - Ausnahme: das un-bedingte
Do Loop
Wobei bei den For-Schleifen die Bedingung fest eingebaut ist - nur die Schlüsselworte Until und While erwarten explizit einen Boolean
Hier nochmal kleines Falsch-Richtig-Sample auch für Schleifen:
While Not b
noch eleganter Do Until b
formulieren kann.Also nochmal die 3 Merksätze
Boolean
ist der Datentyp, mit dem bedingte Verzweigungen codiert werden
- Liegt ein Wert vom Typ
Boolean
vor, so ist ein Vergleichs-Operator nicht erforderlich, um eine Bedingung zu formulieren. Der Boolean ist die Bedingung.
- Um einem
Boolean
-Member einen Wert zuzuweisen bedarf es keiner Verzweigung
4.Vergleiche mit den Konstanten
True
/ False
sind immer UnfugBeim Vergleich mit
True
kommt immer dasselbe raus - kann und sollte also weggelassen werden (s.o.: "gestelztes Deutsch").Beim Vergleich mit
False
kommt immer das Gegenteil raus - hierfür verwende man aber den Not
- Operator.Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von „ErfinderDesRades“ ()