Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TRUE/FALSE Part (https://www.delphipraxis.net/184484-true-false-part.html)

Popov 30. Mär 2015 18:57

AW: TRUE/FALSE Part
 
Zitat:

Zitat von EWeiss (Beitrag 1295391)
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

Ich mag keine Dogmen. Das mit dem
Delphi-Quellcode:
if Foo = True then
Bann ist in etwa wie der Tipp der Mutti: Kind, es ist gerade der schönste Sonnenschein draußen, aber nimm trotzdem den Regenschirm mit, es könnte ja regnen.

Solange man NUR Pascal programmiert und keiner witzig ist und etwas manipuliert, sollte es keine Probleme geben.

Aber Boolean ist meiner Kenntnis nach mindestens ein Byte, so dass da mehr als nur zwei Zustände reinpassen. Und man weiß ja nie mit wem man kommuniziert und was der für True hält, z. B. 1 oder -1 oder 25.

BadenPower 30. Mär 2015 19:09

AW: TRUE/FALSE Part
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1295390)
Zitat:

Zitat von BadenPower (Beitrag 1295389)
Und tunlichst darauf verzichten halte ich für falsch, denn es gibt Situationen, in denen man direkt auf TRUE prüfen muss.

Elaborieren Sie.

Ganz einfach:

1 ist halt nicht TRUE.

Aber 1 und TRUE ergeben beide WAHR.


Einfach einmal eine Form mit 3Buttons anlegen und testen:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private-Deklarationen }
   FVar: Variant;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

  if (FVar = true) then
   begin
    ShowMessage('True');
   end;
  if (FVar = 1) then
   begin
    ShowMessage('1');
   end;
  if (FVar) then
   begin
    ShowMessage('nur FVar');
   end;

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  FVar := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  FVar := 1;
end;

end.

BadenPower 30. Mär 2015 19:35

AW: TRUE/FALSE Part
 
Zitat:

Zitat von EWeiss (Beitrag 1295391)
Solange ich in Delphi arbeite ist True = 1

True war noch niemals 1.

Seit ich mit Delphi und dies ist schon seit Version 1, arbeite war True immer True.

Einfach einmal testen:
Delphi-Quellcode:
Const
  Pruefen = 1;

procedure TForm1.Button1Click(Sender: TObject);
begin

  if (Pruefen) then
   begin
    ShowMessage('Hier komm ich niemals hin, da dieser Code nicht kompiliert wird');
   end;
end;

Popov 30. Mär 2015 19:54

AW: TRUE/FALSE Part
 
Delphi-Quellcode:
  ShowMessage('True = ' + BoolToStr(True));
  ShowMessage('False = ' + BoolToStr(False));

Daniel 30. Mär 2015 20:07

AW: TRUE/FALSE Part
 
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.

EWeiss 30. Mär 2015 20:09

AW: TRUE/FALSE Part
 
Zitat:

Zitat von Daniel (Beitrag 1295418)
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.

Jo und ich denke es wurde alles gesagt was meine Frage bzgl. Kosmetik angeht..
Danke für die rege Beteiligung.

gruss

Bernhard Geyer 30. Mär 2015 20:13

AW: TRUE/FALSE Part
 
Zitat:

Zitat von mkinzler (Beitrag 1295386)
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.

Eigentlich dachte ich das in C die Definition von
Code:
FALSE = 0;
TRUE = !FALSE;
ist.
Auch wenn man (jedenfalls vor Zig Jahren auch in jeder zweiten .h-Unit auch ein TRUE = 1 (oder = -1) sieht1

BadenPower 30. Mär 2015 20:20

AW: TRUE/FALSE Part
 
Zitat:

Zitat von Popov (Beitrag 1295416)
Delphi-Quellcode:
  ShowMessage('True = ' + BoolToStr(True));
  ShowMessage('False = ' + BoolToStr(False));


BoolToStr gibt ja auch nur die Strings zurück, welche in der Funktion hinterlegt sind

Delphi-Quellcode:
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
  cSimpleBoolStrs: array [boolean] of String = ('0', '-1');
begin
  if UseBoolStrs then
  begin
    VerifyBoolStrArray;
    if B then
      Result := TrueBoolStrs[0]
    else
      Result := FalseBoolStrs[0];
  end
  else
    Result := cSimpleBoolStrs[B];
end;
Setzt man als 2. Parameter true kommt für
True nicht "-1" sondern "True"
und für False nicht "0" sondern "False"
zurück.

himitsu 30. Mär 2015 20:56

AW: TRUE/FALSE Part
 
Zitat:

Zitat von BadenPower (Beitrag 1295415)
Zitat:

Zitat von EWeiss (Beitrag 1295391)
Solange ich in Delphi arbeite ist True = 1

True war noch niemals 1.

Seit ich mit Delphi und dies ist schon seit Version 1, arbeite war True immer True.

Einfach einmal testen:

Doch.
Delphi-Quellcode:
ShowMessage(IntToStr(Ord(True)));

Deine Argumentation ist halt falsch, auch wenn sie zur Hälfte betrachtet (nur von außen und nicht von innen) schon richtig aussehen mag. :zwinker:

Es hat niemand gesagt, daß True = 1 ist, so wie du es versuchst zu erklären.

Genauso kann ich keine Char oder Pointer mit einem Integer vergleichen.
Willst du also auch behaupten, daß ein Zeilenumbruch nicht 10 und/oder 13 ist? :zwinker:

Rate mal, warum ich in meinem Beispiel den nummerischen ordinalen Wert in einen Boolean gecastet hatte, anstatt Ihn einfach so zu versuchen zuzuweisen.
Boolean ist intern ein Byte, aber wie dieses Byte behandelt und ausgewertet wird, hängt vom Typ ab. (Byte, ShortInt, AnsiChar, Enum, Set usw.)

BadenPower 30. Mär 2015 21:22

AW: TRUE/FALSE Part
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr.
Seite 2 von 5     12 34     Letzte »    

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