Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zufallsboolean (https://www.delphipraxis.net/117186-zufallsboolean.html)

alzaimar 14. Jul 2008 05:59

Re: Zufallsboolean
 
Zitat:

Zitat von SirThornberry
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen :-)
Delphi-Quellcode:
result := Boolean(random(2));

Oh bitte nicht :wall: :wall:

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.

3_of_8 14. Jul 2008 12:49

Re: Zufallsboolean
 
Zitat:

Zitat von 1234588
laut dem freepascal ref.pdf dokument ist eine variable des LongBool typs true, wenn sie einen wert hat, der nicht 0 ist. selbiges gilt bei ByteBool und WordBool. auszug aus dem besagten dokument:

Freepascal ist auch kein Delphi. Und ich würde einfach sagen, ein Vergleich führt zum selben Code, ist aber verständlicher und einfach schöner. Also warum lange casten?

SirThornberry 14. Jul 2008 19:44

Re: Zufallsboolean
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von SirThornberry
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen :-)
Delphi-Quellcode:
result := Boolean(random(2));

Oh bitte nicht :wall: :wall:

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.

Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.

Dax 14. Jul 2008 20:03

Re: Zufallsboolean
 
Zitat:

Zitat von SirThornberry
Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.

Zitat:

Zitat von Dax
Wenn ich mich Recht erinnere, ist Boolean in Delphi sogar 0 oder 1. Ich glaube mich daran zu erinnern, dass Delphi aus dem "not" ein Integer "xor 1" macht - damit wäre "not Boolen(2)" immer noch true.

Zitat:

Zitat von alzaimar
Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.

q.e.d. ;)

Mal ehrlich: wenn es einen sauberen Weg gibt, sollte man ihn auch gehen, und nicht irgend einen dreckigen Seitenpfad, der verspricht, drei Meter kürzer zu sein.

Namenloser 14. Jul 2008 21:16

Re: Zufallsboolean
 
Zitat:

Zitat von SirThornberry
Zitat:

Zitat von alzaimar
Zitat:

Zitat von SirThornberry
Und da Boolean ja 0 und ungleich 0 ist, kann man sich den Vergleich auf 1 oder 0 auch sparen :-)
Delphi-Quellcode:
result := Boolean(random(2));

Oh bitte nicht :wall: :wall:

Dann ist das Ergebnis u.U. weder True noch False. Lasst doch endlich den Schmarrn mit dem Boolean-Typecasting. Das gibt nur Probleme.

Das gibt nur Probleme wenn man auf True und False prüft. Wenn man auf Wahr und Unwahr prüft gibt das keinerlei Probleme.

Richtig. Das ist genau der Grund, wieso man Konstrukte à la
Delphi-Quellcode:
if x = true then
vermeiden sollte. IMO spricht nix gegen den typecast auf Boolean.

Dax 14. Jul 2008 21:18

Re: Zufallsboolean
 
NL: Kompiliere bitte mal "a_bool := Boolean(2); b_bool := True; c_bool := a_bool xor b_bool;" und poste die Disassembly. Das würde mich echt mal interessieren, wie Delphi den Bool-Cast umsetzt...

alzaimar 14. Jul 2008 21:48

Re: Zufallsboolean
 
Zitat:

Zitat von NamenLozer
Richtig. Das ist genau der Grund, wieso man Konstrukte à la
Delphi-Quellcode:
if x = true then
vermeiden sollte. IMO spricht nix gegen den typecast auf Boolean.

Ach, echt?
Zitat:

Zitat von Mein kleines Testprogramm
1. "If Boolan(2)" funktioniert
2. "If Boolan(2) or False" funktioniert
3. "If Boolan(2)=True" funktioniert NICHT
4. "If Boolan(2) and True" funktioniert NICHT

1 und 2 sind zu erwarten, 3 und 4 jedoch Disaster und Katastrophe in Einem (3 wird wg. 'Äquivalenz' benötigt und ist im Übrigen eine Elementaroperation und hat gefälligst zu funktionieren.

Findest Du das in Ordnung? Du kannst mit gecasteten Booleans einfach nicht arbeiten. Punkt.

Namenloser 14. Jul 2008 21:54

Re: Zufallsboolean
 
Okay, jetzt verstehe ich, was du meinst. XOR liefert ein falsches Ergebnis. (@dax)

Bei random(2) ist es aber trotzdem egal, weil eh nur 0 oder 1 herauskommen kann, und ich denke nicht, dass der Wert von True einafch so in der nächsten Delphiversion geändert wird. Wenn man natürlich auf 100%ige Kompatiblität wert legt, ist die IF SCHLEIFE wohl die bessere wahl.

Btw: mir fällt grad noch was ein:
Delphi-Quellcode:
x := boolean(random(2)*ord(True));
Ist allerdings schon ziemlich entwartet, aber ob das wirklich sinnvoll bzw. schneller ist, ist wohl fraglich. (Bei True=1 wird der Compiler die Multiplikation ja hoffentlich eh rausoptimieren).

edit: aber ist schon gut, ihr habt gewonnen :stupid:

alzaimar 15. Jul 2008 06:21

Re: Zufallsboolean
 
Zitat:

Zitat von NamenLozer
Okay, jetzt verstehe ich, was du meinst. XOR liefert ein falsches Ergebnis. (@dax)

AND und '=' auch. :warn:

FAlter 15. Aug 2008 18:07

Re: Zufallsboolean
 
Hi,

Zitat:

Zitat von NamenLozer
IF SCHLEIFE

:shock:

@alzaimar: Da ist was dran. Ich denke folgendes Beispiel macht das mit =true besser verständlich:

Delphi-Quellcode:
var
  foo, bar: Boolean;

foo := <Funktion aus DLL die -1 (true in anderen Sprachen) zurückgibt>;
bar := <Funktion die 1 (derzeit true in Delphi) zurückgibt>;

if foo = bar then
  blubb; <-- wird nicht ausgeführt
Tja, true <> true, obwohl Äquivalenz vorliegt.

Notfalls würde folgendes helfen, solange feststeht, dass 0 = false:

Delphi-Quellcode:
function equivalent(b1, b2: Boolean): Boolean; inline;
begin
  Result := (b1 = false) = (b2 = false);
end;
Hauptsache, der Compiler optimiert das nicht.

Oder so:

Delphi-Quellcode:
function CorrectBool(b: boolean): boolean; inline;
begin
  Result := b <> false;
end;
Vllt sollte man dieses Thema aufsplitten. Ich sehe es schon kommen, dass es hier um drei Themen geht: Zufallsboolean, Boolean-Werte außerhalb [true, false] und if-ist-keine-schleife.

Mfg
FAlter


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:11 Uhr.
Seite 2 von 3     12 3      

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