AGB  ·  Datenschutz  ·  Impressum  







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

Selsames verhalten bei True abfrage

Ein Thema von EWeiss · begonnen am 12. Apr 2007 · letzter Beitrag vom 13. Apr 2007
Antwort Antwort
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: Selsames verhalten bei True abfrage

  Alt 12. Apr 2007, 19:01
Zitat von Christian Seehase:
Moin Emil,

Zitat von EWeiss:
Wenn ich aus VB '-1 oder 0' für boolean sende kann in Delphi niemals der wert '1 = true' eintreten
und deshalb prüft man nie auf = true

Um Boolsche-Variablen sprechend initialisieren zu können muss man sich für einen Wert entscheiden, der für true steht, in Delphi ist das dann halt 1, in VB -1.
Ja danke..
habs jetzt so geändert das es Sprachunabhängig ist..

gruss Emil
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Selsames verhalten bei True abfrage

  Alt 12. Apr 2007, 20:26
Zitat von SirThornberry:
Zudem hat die cpu mehr zu tun wenn du auf True vergleichst anstelle nur den Boolean als Bedingung zu nehmen (weil ja sonst erst geprüft werden muss ob 2 Variablen identich sind und dann ob der vergleich wahr ist)
@SirThornberry

Das ist so nicht ganz richtig.

ein "if a=true then " wird umgesetzt in
Delphi-Quellcode:
cmp a,1
jnz xxxx // wenn a nicht true ist
ein "if a then" wird umgesetzt in
Delphi-Quellcode:
cmp a,0
jz xxx // wenn a = 0 also false ist
ob die CPU gegen 0 oder 1 prüft macht (vom Aufwand her) keinen Unterschied.

Ansonsten hast Du natürlich Recht mit der Aussage "nie mit True vergleichen.."
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 07:10
Auf True sollte man halt nie prüfen, es sei denn man will/muß ganz genau wissen, ob es wirklich mit True identisch ist.

also im Normalfall immer nur:
B
not B


oder maximal noch,
B <> False
da False immer nur 0 ist.
(wobei es eigentlich besser wäre gleich auf alle "=/<> true/false" zu verzichten)


Und nochmals: nein, kein Bug ... schließlich will man manchmal auch genau dieses Verhalten (B = True, also True <> True) haben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Muehle

Registriert seit: 24. Nov 2006
Ort: 92331 Parsberg
24 Beiträge
 
Delphi 2005 Architect
 
#14

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 08:12
Zu

AppOwnHdcW2 = True (*)


Also mal grundsätzlich falls AppOwnHdcW2 boolean ist, dann
dürfte es eigentlich kein Problem geben !!!

Ist jedoch AppOwnHdcW2 ein Handle, so wie es aussieht,
so hat sich eingebürgert :

if AppOwnHdcW2 then

Grund :

Handle = nil -> Bedingung wird als false interpretiert,
ansonsten true.

Es gilt also folgende Regel :

Vergl. mit true/false nur bei boolean

ansonsten je nach Programmiersprache erstmal schauen,
wie:

if wert then

interpretiert wird.
G.M.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 08:15
Zitat:
Vergl. mit true/false nur bei boolean
Nein bei Boolean entfällt der Vergleich:
if b oder if not b und auf nicht if b = true
Markus Kinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#16

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 08:59
Zitat von Muehle:
Ist jedoch AppOwnHdcW2 ein Handle, so wie es aussieht, so hat sich eingebürgert :

Code:
if AppOwnHdcW2 then
Grund :

Handle = nil -> Bedingung wird als false interpretiert,
ansonsten true.
Nein! Wenn du selber sagst, dass es ein Handle ist, dann ist es kein boolscher Ausdruck und das wird dir der Compiler um die Ohren hauen. Das hat sich vielleicht bei C/C++ eingebürgert, aber nicht bei Delphi, da Delphi nicht standardmässig Ordinaltypen (ausser Boolean) auf Ungleichheit mit 0 prüft!

Bei Boolean gilt auch grundsätzlich der Hinweis von mkinzler...
  Mit Zitat antworten Zitat
Muehle

Registriert seit: 24. Nov 2006
Ort: 92331 Parsberg
24 Beiträge
 
Delphi 2005 Architect
 
#17

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 10:42
zu mkinzler :

natürlich hast du da recht, da kürzer.

jedoch ist if (a=false) zumindest nicht falsch, falls a boolean ist.

Gruß G.M.
G.M.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 10:53
hab's dochauch schon gesagt ... mit/auf FALSE könnte man prüfen, aber da es mit TRUE nicht geht, ist es besser dieses gleich ganz sein zu lassen.

Viele machen ja schließlich nur das nach, was sie irgendwo sehn und denken sich womöglich mit FALSE arbeiten ja viele, warum soll ich's dann nicht auch mit TRUE versuchen ... und irgendwann landen die dann wieder hier und wundern sich weil irgendwas nicht geht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#19

Re: Selsames verhalten bei True abfrage

  Alt 13. Apr 2007, 12:04
Zitat von EWeiss:
Ich denke das ist ein bug in Delphi.
Wenn ich einen Wert strikt als boolean definiere erwarte ich auch das nur auf true
oder false geprüft wird und nicht auf integer oder byte werte.
Nein es ist ein Bug in deiner Deklaration. Wenn du von VB eine Boolschen Wert bekommen willst oder reinreichst, musst du den Datentyp LongBool/WordBool/ByteBool statt Boolean verwenden. Delphi macht dann ganz automatisch die Übersetzung von -1 nach 1 bzw. andersherum.

Delphi-Quellcode:
var
  lb: LongBool;
  b: Boolean;
begin
  lb := True;
{ 83C8FF           or eax,-$01  }
  b := lb;
{ 83F801          cmp eax,$01
  1BC0            sbb eax,eax
  40               inc eax      }

  if b = True then
{ 3C01            cmp al,$01
  7505             jnz +$05     }

    ShowMessage('Ist True');
end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17: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