![]() |
Re: Über den Umgang mit Boolean
Zitat:
Delphi-Quellcode:
ist ja auch richtig
if x = false then
besser if not(x) then aber
Delphi-Quellcode:
sollte man NIEEEEEEE schreiben....
if x = True
...dies kann richtig sein, aber muss nicht richtig sein lies dir das oben bitte nochmal durch, bevor du in Zukunft Fehler im Program hast und die Quell nicht lokalisieren kannst ;) Gruß |
Re: Über den Umgang mit Boolean
Zitat:
Jedenfalls hab ich mir das "= true" schon länger abgewöhnt. Aber das lag hauptsächlich daran, dass ich ziemlich schreibfaul bin :mrgreen: |
Re: Über den Umgang mit Boolean
Hihi, also zunächst schreibe ich immer "TRUE" und "FALSE" und nicht "true" oder "True", ist für mich einfach signalgebender ;)
Allerdings schreibe ich das nie im if-Statement, um Gottes Willen. Ein Programmierer ist von Natur aus faul und abgesehen davon finde ich "Irgendwas=TRUE" stilistisch einfach schrecklich - so sieht Code doch nicht schön aus ;) air |
Re: Über den Umgang mit Boolean
Hallo!
Da war mir in meinem Tut doch tatsächlich der falsche Code reingerutscht - habe ich oben verbessert und markiert :oops: . Sind ja in kurzer Zeit viele Reaktionen gekommen. Antworten darauf kann ich leider heute nicht mehr schreiben. Zum Einen habe ich im Moment viel zu tun und morgen ist hier in Dortmund Roadshow - da bin ich angemeldet. Gruß Dietmar Brüggendiek |
Re: Über den Umgang mit Boolean
Zitat:
Zum Tutorial muss ich sagen, dass ich den Schreibstil etwas daneben finde. Es wird dem Leser ständig suggeriert, dass er schwer von Begriff sei. |
Re: Über den Umgang mit Boolean
Zitat:
Delphi-Quellcode:
Ist zwar eine umständliche Boolsche Auswertung aber immer noch eine korrekte und PASCAL konforme Auswertung die immer richtig umgesetzt wird. Es ist egal ob man dabei den Typen Booelan, WordBool, Bool, ByteBool oder LongBool benutzt.if Boolean = True then Das eingentliche Problem mit falschen Auswertung solcher Konstrukte liegt im CAST eines beliebigen Wertes in einen Boolean Datentyp. Robert hat also oben schon absolut die saubere Lösung zur Vermeidung solcher CASTs aufgezeigt. Denn das nun
Delphi-Quellcode:
mit casted Datentypen denoch korrekt funktioniert liegt ausschließlich nur an der Art & Weise wie der Compiler diese Abfragen in Maschinencode umsetzt. In diesem speziellen Falle erzeugt nämlich der Compiler keinen direkten Vergleich zweier Datenwerte zueinander sondern benutzt spezielle Features der CPU die immer quasi ein Auschlußverfahren anwenden. Auf Grund dessen ist FALSE als 0 definiert und der Compiler erzeugt einen Code der <> 0 oder == 0 testet, je nach TRUE oder FALSE Bedingung.
if Boolean then
// oder if not Boolean then Das der Compiler dies so macht ist keine zwangsläufige und dokumentierte Grundlage zur Auswertung Boolscher Bedingungen. Dieses Verhalten ist undokumentiert und man kann sich darauf nicht verlassen ! Der Compiler könnte also interen selber ebenfalls einen direkten Wertvergleich durchführen, dh. also aus
Delphi-Quellcode:
und würde dann ebenfalls auf die Schnauze fallen mit casted Boolean's.
if Boolean then
// macht der Compiler einen Maschinencode wie if Boolean = Truee then Die eigentliche Ursache des Problems liegt also nicht in der Art & Weise der Abfrage eines Booleans sondern in der Erzeugung eines Booleans per TypCasts !! Ergo: Sich hinzustellen und zu behaupten das eine PASCAL konforme Abfrage schlecht wäre und zu Fehlern führt ist die falsche Konsequenz. Dies stimmt nicht, da die Ursache einzigst im Cast eines Datentypes liegt. Man kann zwar versuchen den Schimmelbefall eines Hauses durch einen sauberen Anstrich zu verdecken, aber nur die Beseitigung des Übels schafft wirklich abhilfe. Das macht aber einen schlechteren Hausanstrich nicht verantwortlich dafür das der Schimmelbefall immer noch da ist. Das die umständliche Abfrage eines Boolschen Datentypes per zusätzlichem Boolschen Vergleich doppelt gemoppelt ist und somit sehr un-clever ist sei unbestritten, aber nicht falsch im Sinne der PASCAL Semantik. Schaut mal den IT Professoren auf Bayern3 im <IT> Grundkurs zu und was die für schreckliche PASCAL Sourcen als Lehrmittel heranziehen. Da habe ich solche doppeltgemoppelten Boolschen Abfragen schon sehr oft gesehen. Gruß Hagen [edit] Die Frage eines Stils des "Bullet proof" Programmieren kann man aber mit deinem Tutorial sehr wohl begründen. Es ist also sauberer Boolsche Datentypen direkt Boolsch auszuwerten und macht auf Grund der speziellen Auswertung solcher Abfragen durch den Compiler den Code sicherer. Aber er wird dadurch nicht richtiger als die un-celvere Art der Boolschen Abfragen ! [/edit] |
Re: Über den Umgang mit Boolean
Hallo Dietmar,
ich bin Delphi-Anfänger und verstehe folgendes nicht: Zitat:
Wenn ich aber
Delphi-Quellcode:
schreibe, dann müssen doch auf jeden Fall beide Bedingungen geprüft werden, oder? Schließlich lässt sich aus der Richtigkeit der ersten Bedingung nicht auch das Zutreffen der zweiten schließen (jedenfalls in meiner Logik ^^).
if (Length(StringVar)>=5) and (StringVar[5]='x') then
IrgendWas; Bitte sei so nett und erklär es mir noch mal etwas genauer ;) Gruß Marcus |
Re: Über den Umgang mit Boolean
Zitat:
|
Re: Über den Umgang mit Boolean
Servus,
Zitat:
Delphi-Quellcode:
Was ist denn hier schneller / angebrachter / richtiger?
BoolVar:=IntVar<>5;
Grüße, Georg |
Re: Über den Umgang mit Boolean
würdest Du bitte aus dem "Tutorial" ein pdf erstellen, in dem alle Anmerkungen / Korrekturen aus diesem Thread eingeflossen sind?
Danke im Voraus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz