Ist in der Hilfe irgendwo erklärt, dass man bei einer IF Bedingung auch ohne Vergleichsoperator arbeiten kann, die Wahr/Falsch Logik dann aber nicht so arbeitet wie im Bereich des "If" Befehls erklärt (bzw. einem die Konstanten #True und False vorgaukeln)?
Es wird ja z.B. oft folgendes geschrieben (also ohne "<> 0" bzw. "<> #False"):
Code: Alles auswählen
If CreateImage(...)
Debug "CreateImage() war erfolgreich"
; Mach was mit dem Image
Endif
Hier gibt CreateImage entweder 0 zurück, wenn etwas schief gelaufen ist (If Block wird nicht ausgeführt) oder eine Objektnummer <> 0 (If Block wird ausgeführt).
Wird kein Vergleichsoperator (< = > ! usw) benutzt, dann wird bei obigem If Befehl also alles was nicht 0 ist als "wahr" interpretiert.
Kann man hiermit auch kurz gegenprüfen:
Code: Alles auswählen
Debug #False
Debug #True
If 4861233
Debug "0: 4861233 ist wahr"
EndIf
If 300
Debug "1: 300 ist wahr"
EndIf
If 0
Debug "2: 0 ist wahr"
Else
Debug "2: 0 muss daher falsch sein"
EndIf
If 300 = #True
Debug "3: 300 ist wahr"
EndIf
If 300 = #False
Debug "4: 300 ist falsch"
EndIf
If 0 = #False
Debug "5: 0 ist falsch"
EndIf
Heraus kommt dabei:
Code: Alles auswählen
[Debug] 0
[Debug] 1
[Debug] 0: 4861233 ist wahr
[Debug] 1: 300 ist wahr
[Debug] 2: 0 muss daher falsch sein
[Debug] 5: 0 ist falsch
Die Beschreibung des IF Befehls sagt folgendes dazu:
Die If Struktur wird zu Testzwecken benutzt und/oder um die Richtung der weiteren Programmausführung zu ändern - abhängig davon, ob der Test 'wahr' oder 'falsch' ergibt.
Lt. Konstantendefinition ist #False = 0 und #True = 1, weshalb in dem obigen Code "If 300 = #True" auch nicht ausgeführt wird - wohl aber "If 300" als #True bzw. "nicht #False" interpretiert wird.
Arbeitet nun der IF Befehl absichtlich "unschärfer", um solche netten Sachen wie "If CreateImage()" schreiben zu können oder ist die Definition von #True nicht korrekt, weil es eigentlich nicht mit "1" definiert sein dürfte, sondern mit der Menge aller Zahlen <> 0 ?
Ich selbst mache mir da ja keine Gedanken mehr drüber und benutzte das alles einfach so. Jetzt bin ich aber dabei Jemand anderem PureBasic zu erklären und werde an genau diesem Punkt konkret auf "Unstimmigkeiten" aufmerksam gemacht.
Leider finde ich nichts Zufriedenstellendes in der Anleitung dazu, was das "#True/#False/If Phänomen" eindeutig erklären würde.
Habe ich nur was übersehen?
Gruß Kurzer