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 2 von 2     12   
Popov
(Gast)

n/a Beiträge
 
#1

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 19:54
Delphi-Quellcode:
  ShowMessage('True = ' + BoolToStr(True));
  ShowMessage('False = ' + BoolToStr(False));
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 20:07
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
BadenPower

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 20:20
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.
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
Benutzerbild von himitsu
himitsu
Online

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 20:56
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.
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.

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?

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.)
Ein Therapeut entspricht 1024 Gigapeut.

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

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:22
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.
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
Caps

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 21:31
Sorry,

in meinem abendlichen Schnupfen- und Erkältungswahn muss ich auch noch meinen Senf dazugeben:
Ich habe mich mit diesem Thema auch schon mal herumgeärgert.

Meines Erachtens ist die Definition der Konstanten True und False schlicht kontraintuitiv, da man in der Aussagenlogik keinerlei Probleme mit einem Vergleich (x = True) hätte.
Ich möchte mich nicht zu weit aus dem Fenster lehnen, aber True bedeutet in der natürlichen Sprache nunmal "wahr" und False bedeutet "falsch", und dann war ja da noch dieser Hinweis "benenne Deine Objekte und Variablen (und Konstanten) so, dass man die Bedeutung leicht erkennen kann".

Aber wie gesagt: Schnupfen und Erkältung - nichts für ungut

lg Caps

Edit:

In schwach typisierten Sprachen wie PHP ist es manchmal tatsächlich notwendig, direkt auf den Wahrheitswert zu prüfen, allerdings deshalb, weil man implizit den Typ mit überprüft:
Code:
if (x === true) { ... }
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."

Geändert von Caps (30. Mär 2015 um 21:37 Uhr) Grund: Nießen
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.222 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 20:13
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
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
BadenPower

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 17: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 17:46 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 17: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
BadenPower

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

AW: TRUE/FALSE Part

  Alt 30. Mär 2015, 19:09
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.
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
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 08:15 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