Einzelnen Beitrag anzeigen

xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#16

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 21:35
Hallo,
Zitat von Popov:
Das ist nicht richtig im Sinne von Boolean.

Nur weil etwas nicht definiert ist, bedeutet es nicht, daß es eine Wahlmöglichkeit gibt. Ein Boolean hat zwei Zustände, nicht drei und auch nicht vier. Zwei. Ob nun False für 0 steht und True für 1, 2 oder 3 ist egal. Nicht egal ist ob True für 1 und 2 und 3 steht. Tut es nicht. Ein Boolean steht für zwei Zustände. Es kann für 0 und für 7 stehen, aber dann nicht für 1. Also, nur weil es nicht knallt wenn ich Inc(Bool) mache, bedeute es nicht, daß True alles ungleich 0 ist, dann dann wäre die Boolean Definition nicht, daß es eines von zwei Zuständen ist, sondern Null und allem Anderen.

...

Anders sieht es aus wenn du nicht von Delphi/Pascal sprichst, sondern allgemein. Da könnte False für 12 und True für 27 stehen. Hauptsache zwei Zustände. Aber wir sind hier in einem Programmierforum für Delphi.
Wir befinden uns zwar in einem Delphi-Forum, müssen uns aber mit einer Umgebung herumplagen, die in C geschrieben ist. Deshalb sollte man keine Funktion schreiben, die nur mit einem Delphi-Boolean zurechtkommt (ich will gar nicht wissen, wie viele verschiedene Boolean-Typen in den Windows-Sourcen definiert sind). Übrigens reden wir auch nicht von einem Boolschen Wert im Sinne der Mathematik (zwei Zustände), sondern über den Wert einer boolschen Variable in Programmiersprachen, und da gilt nun mal: alles außer Null ist True. Deshalb ist zwar Deine Sichtweise "es gibt nur zwei Zustände" prinzipiell richtig, für die Praxis aber nicht brauchbar. Unterschiedliche Programmiersprachen definieren eben True ab und zu anders, ich habe aber noch keine gesehen, die False nicht als Null definiert. Eigentlich sollte die Funktion sogar so aussehen:
Delphi-Quellcode:
function BoolToInt(B: Boolean): Integer;
begin
  if b then
    Result := Integer(True)
  else
    Result := Integer(False);
end;
Damit sind wir auch auf der sicheren Seite, wenn Borland einmal True und False neu definiert .
Zitat von Popov:
Deshalb kann man Inc(Bool) als Programmierfehler ansehen.
Nein, das kann man nicht. Ist vielleicht keine schöne Sache, aber durchaus zulässig und gültiges Pascal. Und genau deshalb muss eine Funktion sowas auch berücksichtigen. Dass derjenige, der sowas macht, ab Besten erschossen werden sollte, ist natürlich selbstverständlich .

Nix für ungut
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat