AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRUE/FALSE Part

Ein Thema von EWeiss · begonnen am 30. Mär 2015 · letzter Beitrag vom 2. Apr 2015
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

TRUE/FALSE Part

  Alt 30. Mär 2015, 18:32
Sorry bestimmt schon oft besprochen..
Aber destotrotz!

Warum sollte man tunlichst auf das prüfen von True und False verzichten.
Kosmetisches Problem oder was steckt da hinter?

If Foo = True then
if Foo then


If Foo = False then
if not Foo then

Was macht jetzt den Unterschied ?

gruss
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:40
False ist als 0 deklariert -> True ungleich 0.
Delphi verwendet hierfür 1, C ( also auch WinaAPI) -1 ( als binäres Komplement zu 0)
1 ist aber <> -1 -< True ist nicht gleich True.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:43
Detaillierte Erklärung hier: Über den Umgang mit Boolean.

MfG Dalai
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:44
Sorry bestimmt schon oft besprochen..
Aber destotrotz!

Warum sollte man tunlichst auf das prüfen von True und False verzichten.
Kosmetisches Problem oder was steckt da hinter?

If Foo = True then if Foo then
If Foo = False then if not Foo then Was macht jetzt den Unterschied ?
Wenn Du auf If Foo = True then prüfst, dann prüft Du, ob Foo den Booleanwert TRUE hat.

Wenn Du If Foo then auswertest, dann prüft Du, ob die Auswertung von Foo "Wahr" ergibt.


Und tunlichst darauf verzichten halte ich für falsch, denn es gibt Situationen, in denen man direkt auf TRUE prüfen muss.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (30. Mär 2015 um 18:46 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:47
Und tunlichst darauf verzichten halte ich für falsch, denn es gibt Situationen, in denen man direkt auf TRUE prüfen muss.
Elaborieren Sie.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:52
False ist als 0 deklariert -> True ungleich 0.
Delphi verwendet hierfür 1, C ( also auch WinaAPI) -1 ( als binäres Komplement zu 0)
1 ist aber <> -1 -< True ist nicht gleich True.
Nun mir erschließt sich das immer noch nicht.
Solange ich in Delphi arbeite ist True = 1

Was spricht also gegen die Prüfung von
if Foo = True then
welchen zustand kann ich denn solange ich in Delphi unterwegs bin noch erreichen als 1

Würde ich innerhalb Delphi mit mehreren API's unterwegs sein also bsp. C++.dll könnte ich verstehen das hier eventuell inkonsistenten entstehen.
Aber so?

Doch kosmetische Sache?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 18:59
Ein Delphi-Boolean ist intern als ein Byte (1 Byte) deklariert, denn die kleinste "adressierbare" Speicherheinheit ist nunmal ein Byte.
Der BOOL in C++ ist intern als ein INT (Integer, 4 Byte) deklariert.

Die Boolean-Variablen haben also nicht zwei Zustände, sondern 256.
Einer davon ist False, da das immer 0 ist.
"Wahr" ist dagegen als ungleich 0, bzw. "nicht Falsch" definiert.

Die Konstante "True" ist in Delphi aber als 1 deklariert. (kann halt nur einen Wert besitzen)

Delphi-Quellcode:
var
  B: Boolean;

B := True;
if B then Beep;
if not B then Beep;
if B = True then Beep; // hast du ein Glück gehabt, daß es "zufällig" genau 1 ist
if B = False then Beep;

B := Boolean(2);
if B then Beep;
if not B then Beep;
if B = True then Beep; // nänänänänäääääääää
if B = False then Beep;
if B <> False then Beep;

Du kannst niemals sagen, ob der Wert nicht doch aus irgendeiner API kommt, ober über Assembler oder sonstwelche bösen Casts erzeugt wurde.
Darum einfach grundsätzlich niemals genau auf True prüfen, außer mann will/muß eben wissen, ob es wirklich genau die True-Konstante ist.

Ja, ich hab in Boolean auch schonmal absichtlich mehr als nur einen Wert kodiert (ThreeState)
oder bei einem Enum oder Set "ungültige" Werte benutzt.

Und ich kenne viele WinAPIs, die in Delphi falsche implementiert sind.
BOOL statt INT und anderesrum.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Mär 2015 um 19:11 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#8

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 19:11
Doch kosmetische Sache?
Nein. Sobald du eine API-Funktion direkt aufrufst, die z.B. einen BOOL zurückgibt (oder einen solchen Typ als out-Parameter hat), entspricht das Ergebnis eben nicht mehr zwingend einem Boolean. Dazu muss man noch nicht einmal irgendeine DLL laden, denn auch kernel32.dll, shell32.dll usw. reichen da bereits aus.

EDIT: Hier mal ein Beispiel für eine Datenstruktur mit einem BOOL in der WinAPI: http://blog.delphi-jedi.net/2008/09/...n-and-integer/

MfG Dalai

Geändert von Dalai (30. Mär 2015 um 19:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 19:22
Aber selbst die "kosmetische Sache" würde mich überzeugen:

if (EtwasZutrifft) then TuEtwas; ist doch eigentlich eingängig.
if (EtwasZutrifft = WahrIst) then TuEtwas; ist eher sperrig zu lesen.

Wenn es dann noch Compilerbedingte Gründe für die verkürzte Schreibweise gibt, würde ich mich auf jeden Fall für diese entscheiden.


Nachtrag:
Mir fiel jetzt noch ein: if (A = B) = True then ... würde ja auch niemand schreiben.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (30. Mär 2015 um 19:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 19:27
Aber selbst die "kosmetische Sache" würde mich überzeugen:

if (EtwasZutrifft) then TuEtwas; ist doch eigentlich eingängig.
if (EtwasZutrifft = WahrIst) then TuEtwas; ist eher sperrig zu lesen.

Wenn es dann noch Compilerbedingte Gründe für die verkürzte Schreibweise gibt, würde ich mich auf jeden Fall für diese entscheiden.
Mit englischen Begriffen liest es sich sogar fast wie Prosa
Delphi-Quellcode:
if APerson.IsMarried then
  APerson.DriveHome
else
  APerson.StayWhereYouWant;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 18:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz