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
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:32
Im Zitat von EWeiss steht:
Zitat:
True = 1
und dies ist eben nicht richtig, denn laut Delphi, nachzulesen unter "Boolesche Typen" ist True eben nicht 1 sondern:
Zitat:
Ord(True) = 1
Und dies ist ein gewaltiger Unterschied, den ich mit einfachen Mittel belegt habe, in dem ich einfach einen Integerwert 1 in der If-Bedingung verwendet habe.

Klar, dass dies nicht funktionieren kann, aber es sollte eben verdeutlichen, dass True eben nicht 1 ist.

Bei anderen Boolschen Typen also nicht Boolean sondern ByteBool, WordBool oder LongBool ist Ord(True) auch nicht 1 sondern ungleich 0.
Wie Daniel schon sagte..
Zitat:
Wir haben hier viele gute und sachliche Argumente gehört - aber lasst doch die Erbsenzählerei sein.
Nicht jedes Wort gehört auf die Goldwaage.
Ich dachte das jeder versteht was damit gemeint war. (Ohne Erbsen zu zählen)
Programmiere nicht erst seit gestern und wollte nur wissen ob die Art ob man auf True vergleichen soll oder nicht
Kosmetischer Natur ist.
Das wurde ja letztendlich geklärt.


gruss

Geändert von EWeiss (30. Mär 2015 um 21:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:46
Ja, in PHP und Co. ist das ein Sonderfall, da dort "alles" als Boolean ausgewertet werden kann, also auch 0 und 1 oder -1 (die Integer).
Genauso, wie man das auch in Delphi machen kann, z.B. mit einen Variant.

Aber etwas umgestellt, kann man das if (x === true) { ... } auch als if (is_bool(x) and x) { ... } darstellen und schon wird haben wir das =True auch weg, aber dort bevorzuge ich auch das Kürzere.

Ich weiß auch garnicht, ob der "Boolean" in PHP überhaupt mehr als 2 Zusände haben kann, also wie dort die Zuweisungen/Auswertungen genau arbeiten.
Wenn PHP das abfängt, dann ist ein = True auch nicht schlimm, wobei, wie du schon sagtest, dort x===True dem x=True im Delphi fast gleichzusetzen ist.
[edit] ich meinte natürlich == True ... ja, ein = kann echt böse enden.


Ich glaub ich geh bald schlafen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Mär 2015 um 21:55 Uhr)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#3

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:51
Ich glaube in PHP sind es reservierte Wörter, aber das glaube ich nur, weil sie blau werden, wenn ich sie eintippe

Fragt sich natürlich trotzdem, wie die interne Repräsentation aussieht...
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
BadenPower

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:56
Genauso wie man das auch in Delphi machen kann, z.B. mit einen Variant.
Siehe Post #12.

Wobei man dort schön sieht, dass man dann expliziet auf if (var = true) then prüfen muss, wenn man tatsächlich TRUE benötigt und nicht nur "ergibt Wahr".


Um es auf den Punkt zu bringen: False ist 0.
Wenn man sich es richtig angewöhnt, dann gibt es keine Diskussionen.

False ist nicht 0 sondern
Code:
Ord(False) = 0
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 21:59 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 22:00
Wobei man dort schön sieht, dass man dann expliziet auf if (var = true) then prüfen muss, wenn man tatsächlich TRUE benötigt und nicht nur "ergibt Wahr".
Ja und nein ... siehe mein PHP-Beispiel if (is_bool(x) and x) { ... } , also VarIsBool(x) and X .
Aber dort gibt es einen Sonderfall, denn Variant speichert den "Boolean" als WordBool (2 Byte), beim Auslesen als Boolean (1 Byte), nimmt Delphi eine Typkonvertierung vor und gibt entweder True (1), False(0) oder eine Exception (nicht konvertiervar) raus,
denn einfach nur abschneiten (billig casten) kann falsch sein, da $0100 Wahr ist, aber $00 somit ein Problem wäre.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Mär 2015 um 22:04 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 22:10
False ist nicht 0 sondern
Code:
Ord(False) = 0
Der Wert von False ist 0. Es ist egal ob Ord('A') 65 ergibt, das Byte von A hat den Wert 65.

Byte(False)
  Mit Zitat antworten Zitat
BadenPower

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 22:20
False ist nicht 0 sondern
Code:
Ord(False) = 0
Der Wert von False ist 0. Es ist egal ob Ord('A') 65 ergibt, das Byte von A hat den Wert 65.

Byte(False)
Merkst Du was?
Du hast mich doch gerade bestätigt.

Der 'Ordinalwert von False ist 0' und nicht 'False ist 0'.
Denn "A" ist ja auch nicht 65, aber der Ordinalwert.
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.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#8

AW: TRUE/FALSE Part

  Alt 31. Mär 2015, 07:47
Ich habe keine Ahnung davon, sondern probiere aus:

Code:
A:=0. b := Bool(A) := FALSE. b1=true? FALSE b1=false? TRUE
A:=1. b := Bool(A) := TRUE. b1=true? TRUE b1=false? FALSE
A:=2. b := Bool(A) := TRUE. b1=true? FALSE b1=false? FALSE
A:=3. b := Bool(A) := TRUE. b1=true? FALSE b1=false? FALSE
A:=FF. b := Bool(A) := TRUE. b1=true? FALSE b1=false? FALSE
Also... ähm. Bool(0) = false, alles andere ist true.... Aber dann... gilt manchmal eben auch: true <> true. Boolean(2) ist z.B. so ein Fall, aber eben auch Boolean(255).

Weswegen es -alter Hut- wirklich bescheuertnicht zu empfehlen ist, eine bool'schen Wert auf =TRUE abzufragen. Denn, wie auch schon 1024x erwähnt, gibt es durchaus Routinen (API), die eben nicht nur 0 und 1 liefern, sondern z.B. -1 (also FF). Und daher sollte man eben nur 'If Resultat then' schreiben, denn das klappt auch bei Bool(255).

Ein Variant ist übrigens kein bool'scher Wert und wenn ich einen Variant auf einen Bool'schen Wert abfragen will, dann konvertiere ich vorher sicher, denn ansonsten knallt mir der Vergleich irgendwann um die Ohren (wenn der Variant z.B. ein Array beinhaltet). Und wenn ich schon sicher konvertiere, kann ich mir die Abfrage auf '=True' auch sparen.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: TRUE/FALSE Part

  Alt 1. Apr 2015, 23:14
Es ist unter C auch nicht ganz unüblich, den Erfolg einer Instanzerstellung so zu prüfen:
Code:
MyClass mc = NULL;
mc = New(MyClass);
if !(mc)
  MessageBox("Mööp!");
else
  DoSomethingWithMC(mc);
Dabei wird genutzt, dass NULL in C == 0 ist, was wiederum == false ist. Und da C nicht typsicher ist, geht diese Abomination. Wie aber true genau definiert ist, hängt überall von der konkreten Implementierung ab. Die einzige in allen Sprachen konstante Weisheit ist: false = 0
True kann alles andere was nicht 0 ist sein wenn man jetzt mal die beinhaltende Variable binär betrachtet und als Zahl interpretiert. Ob 1, -1 oder !0 (das binäre Ergebnis hängt vom hinter dem Bool stehenden Typen ab, also wie lang er ist, ob er mit Vorzeichen definiert ist oder nicht usw.) - das sind die üblichen Vertreter. Aber prinzipiell sind alle Binärwerte verschieden von 0 als true möglich. Egal ob Ord(irgendwas) nun irgendwasanderes ist oder nicht.

Wenn man für alle Fälle und immer sicher sein will, prüft man stets nur auf false, und schreibt alles was im true-Fall passieren soll in den else-Zweig. Dann wäre man immer auf der super-sonder-sicheren Seite. Ein einfaches Weglassen von =true oder =false hat bei mir bisher aber auch in Fällen der Zusammenarbeit mit C und APIs immer zum richtigen Ergebnis geführt. Entweder Glück, oder Delphi tut da relativ sinnvolle Dinge im Hintergrund. Oder ich habe bisher keine allzu bösartigen DLLs in der Hand gehabt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 1. Apr 2015 um 23:17 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:58 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-2025 by Thomas Breitkreuz