AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Über den Umgang mit Boolean
Tutorial durchsuchen
Ansicht
Themen-Optionen

Über den Umgang mit Boolean

Ein Tutorial von Brüggendiek · begonnen am 16. Nov 2005 · letzter Beitrag vom 7. Feb 2012
Antwort Antwort
Seite 2 von 3     12 3      
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

Re: Über den Umgang mit Boolean

  Alt 16. Nov 2005, 15:23
Zitat von malo:
Also, ich muss ganz ehrlich sagen, dass ich gelegentlich eine Abfrage mit "= false" mache. .....

Ich persönlich finde jedenfalls, dass es übertrieben ist, sich darüber "aufzuregen", dass manche "if irgendwas = true" schreiben. Das Ganze hat auch etwas mit Programmierstil zu tun. Und wer es so übersichtlicher findet, soll es halt übersichtlicher finden. Auf die 6 Zeichen die dabei zusätzlich getippt werden (meinetwegen bei 100 maligem Aufruf 600 Zeichen) kommt es auch nicht mehr drauf an.

if x = false then ist ja auch richtig
besser
if not(x) then

aber

if x = True sollte man NIEEEEEEE schreiben....
...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ß
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#2

Re: Über den Umgang mit Boolean

  Alt 16. Nov 2005, 17:41
Zitat von Tyrael Y.:
if x = True sollte man NIEEEEEEE schreiben....
...dies kann richtig sein, aber muss nicht richtig sein

lies dir das oben bitte nochmal durch
Jetzt hab ich auch dieses "Problem" verstanden.

Jedenfalls hab ich mir das "= true" schon länger abgewöhnt. Aber das lag hauptsächlich daran, dass ich ziemlich schreibfaul bin
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#3

Re: Über den Umgang mit Boolean

  Alt 16. Nov 2005, 17:54
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
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#4

Re: Über den Umgang mit Boolean

  Alt 16. Nov 2005, 19:06
Hallo!

Da war mir in meinem Tut doch tatsächlich der falsche Code reingerutscht - habe ich oben verbessert und markiert .

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
Dietmar Brüggendiek
Die 6 Probleme des Programmierers: 1. dauert das länger, als man 2. glaubt, 3. geht das nicht so, wie man sich das 4. schlau überlegt hat, und 5. sitzt der Fehler da, wo man ihn 6. zuletzt sucht
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#5

Re: Über den Umgang mit Boolean

  Alt 16. Nov 2005, 19:19
Zitat von Airblader:
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
Naja, ein mit C vertrauter Programmierer würde vielleicht meinen, dass du mit TRUE und FALSE die Windows-Konstanten meinst, die als Integer mit 4 Bytes definiert sind.

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.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#6

Re: Über den Umgang mit Boolean

  Alt 17. Nov 2005, 07:34
Zitat:
Der Cast auf Boolean soll doch ein Cast sein, der die Daten nicht verändert, sondern nur den Typ.
Das ist doch gerade der Kernpunkt des ersten Teil des Tutorials!

Würde man deine Konstruktion verwenden, bekäme man in diesem Fall keine Probleme mit einem expliziten Vergleich auf true oder false.

if Boolean = True then
sollte man NIEEEEEEE schreiben....
...dies kann richtig sein, aber muss nicht richtig sein
Ich weis nicht, dein "Tutorial" zieht meiner Meinung nach die falschen Schlußfolgerungen.

Delphi-Quellcode:

if Boolean = True then
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.

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:
if Boolean then
// oder
if not Boolean then
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.

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:
if Boolean then
// macht der Compiler einen Maschinencode wie
if Boolean = Truee then
und würde dann ebenfalls auf die Schnauze fallen mit casted Boolean's.

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]
  Mit Zitat antworten Zitat
Benutzerbild von Merlin2001
Merlin2001

Registriert seit: 7. Jun 2005
Ort: Stuttgart
8 Beiträge
 
Delphi 7 Personal
 
#7

Re: Über den Umgang mit Boolean

  Alt 25. Jul 2006, 10:44
Hallo Dietmar,

ich bin Delphi-Anfänger und verstehe folgendes nicht:

Zitat von Brüggendiek:
Auswertung boolscher Ausdrücke

(...)
Die verkürzte Auswertung von Boolean-Ausdrücken führt aber zu einer weiteren bösen Falle:
Delphi-Quellcode:
if (Length(StringVar)>=5) and (StringVar[5]='x') then
  IrgendWas;
ist eine ganz gefährliche Sache. Bei optimiertem Boolean wird der 2. Teil nicht mehr ausgewertet; ohne Optimierung jedoch ergibt sich bei AnsiString die Situation, daß der Index außerhalb des Wertebereichs liegen kann.
Solange man in seiner Unit/Komponente den B-Compilerschalter richtig einstellt, sollte beim Austausch von Quellcode nichts passieren. Wenn man sich jedoch auf die Einstellung des Compilers verläßt, ist man verlassen und erhält dann vom Anwender Rückmeldungen, daß das Ganze "manchmal" fehlerhaft läuft.
Du sprichst ja davon, dass bei manchen Abfragen das Ergebnis frühzeitig feststeht.
Wenn ich aber

Delphi-Quellcode:
if (Length(StringVar)>=5) and (StringVar[5]='x') then
  IrgendWas;
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 ^^).
Bitte sei so nett und erklär es mir noch mal etwas genauer

Gruß
Marcus
Marcus Mangelsdorf
Wie bei den meisten Türen in öffentlichen Toiletten war es auch bei dieser:
Unten ein ca. 30 cm breiter Spalt. Darüber stand:

"Be aware of Limbo-Dancers!"
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Über den Umgang mit Boolean

  Alt 25. Jul 2006, 10:54
Zitat von Merlin2001:
Wenn ich aber

Delphi-Quellcode:
if (Length(StringVar)>=5) and (StringVar[5]='x') then
  IrgendWas;
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 ^^).
Wenn die erste Bedingung schon falsch ist (die Länge des Strings also kleiner als 5), dann kann der gesamte Ausdruck nicht mehr wahr werden. Nur dann wird die weitere Auswertung abgebrochen. Das liegt daran, dass "False AND Irgendwas" immer "False" liefert, genau wie "True OR Irgendwas" immer "True".
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
stefangeorg
(Gast)

n/a Beiträge
 
#9

Re: Über den Umgang mit Boolean

  Alt 25. Jul 2006, 11:02
Servus,

Zitat:
Da hilft
BoolVar:=not (IntVar=5);
Hier würde ich schreiben:
BoolVar:=IntVar<>5; Was ist denn hier schneller / angebrachter / richtiger?

Grüße,

Georg
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Über den Umgang mit Boolean

  Alt 25. Jul 2006, 11:26
würdest Du bitte aus dem "Tutorial" ein pdf erstellen, in dem alle Anmerkungen / Korrekturen aus diesem Thread eingeflossen sind?

Danke im Voraus.
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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