Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

True / False bei logischen Verknüpfungen ausschreiben?

Begonnen von Doming, Mai 16, 2025, 11:09:07

⏪ vorheriges - nächstes ⏩

Doming

Moin,

mal eine kleine Verständisfrage:

Ich frage drei Bedingungen folgendermaßen ab: If Bool1 And Bool2 And Not Bool3 ThenNun bin ich irgendwo darauf gestoßen, dass man true und false mitschreiben sollte:
If Bool1 = True And Bool2 = True And Bool3 = False ThenAbgesehen von dem Mehr an Tipparbeit, gibt es dafür eine nachvollziehbare Erklärung?

Gruß
 Doming

Knobbi38

Hallo Doming,

das ist doppelt gemoppelt und sollte deshalb weggelassen werden. Die Lesbarkeit wird dadurch auch nicht besser.

Gruß Knobbi38
 

Bitsqueezer

Hallo,

man sollte dabei aber auch sicherstellen, daß die drei Variablen wirklich Bool-Variablen sind, also so deklariert wurden. Oft sieht man auch "Dim Bool1" ohne Zusatz oder "Dim Bool1, Bool2, Bool3 As Boolean", wo dann nur der letzte eine Bool-Variable ist und alles andere Variant.

Bei echten Bool-Variablen ist die erste Version von Dir in jedem Fall besser, weil kürzer, lesbarer. Ich wüßte nicht, welchen Vorteil das Ausschreiben mit True/False haben sollte, da bei If ohnehin nur True/False getestet wird.

Gruß

Christian

Doming

#3
Hallo,

das mit den Bool'schen Variablen war nur als Beispiel gedacht.
If Me.TextFeld2.Enabled And Forms!frm_Formular!Textfeld1.Visible And Not Me.Checkbox Thenwäre ebenso ein Beispiel

Currentdb.OpenRecordset ("SELECT Feld1, Feld2 FROM tbl_Tabelle WHERE JaNeinFeld AND NOT JaNeinFeld2")

Bitsqueezer

Hallo,

das sind allerdings verschiedene Szenarien.
Bei allem, was klar einen Bool-Wert zurückgibt, kann man getrost "True/False"-Vergleiche weglassen. Dein erstes Beispiel mit "Enabled/Visible" zählt dazu. Und es ist einfacher zu lesen, wenn die Bedingung lautet "if x.visible" oder "if y.enabled", weil es dann auch sprachlich paßt.
Bei der Checkbox ist es schon nicht mehr eindeutig, da die Checkbox auch als Tri-State geschaltet werden kann und dann NULL enthalten kann. Bei gebundenen Checkboxen an Ja/Nein-Feldern in einer Access-Tabelle kann das nicht passieren, da Access-Tabellen für Ja/Nein-Felder kein NULL kennen. Ist die Checkbox ungebunden oder an z.B. eine SQL-Server-Tabelle an ein Bit-Feld gebunden, kann sie dagegen auch NULL sein. Hier muß man also ein "Nz" für die Checkbox verwenden, wenn das nicht sicher ist, und einen Booleschen Ersatzwert wählen, wenn es NULL ist. Danach ist das Ergebnis wieder True/False.
Wenn es an ein Bit-Feld gebunden ist, kann es theoretisch auch 0/1 sein, was kein True/False ist. 0=False, aber 1 ist nicht True (in VBA).

Das gleiche gilt für das SELECT-Beispiel. Ist es eine Access-Tabelle, wäre JaNein immer nur True oder False. Aber hier muß man ebenso auf den SQL-Dialekt achten. In T-SQL wäre bei einem Bit-Feld auch hier kein True/False das Ergebnis sondern 0/1. Es gibt auch kein "True/False" hier. Das geht nur in Access-SQL.

Entsprechend muß man aufpassen. In Access-SQL ginge "WHERE JaNeinFeld" in T-SQL nicht. Hier würdest Du einen Fehler erhalten:
An expression of non-boolean type specified in a context where a condition is expected

Da der Vergleich in WHERE fehlt.

Gruß

Christian