Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zuweisung im if-Schleifen-Stil?!


Mitmischer 1703 - Mi 28.01.09 17:23
Titel: Zuweisung im if-Schleifen-Stil?!
Hi DF!

In dem Beispiel zur Prozedur "Reset" der Delphi-Hilfe ist mir folgende Zeile aufgefallen:
FileIsThere := (IOResult = 0and (FileName <> '')

Hier der gesamte Quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
function FileIsThere(FileName: string): Boolean;

{ Boolesche Funktion, die True zurückliefert, wenn die Datei vorhanden ist.
  Andernfalls wird False zurückgegeben. Closes the file if it exists. }

 var
  F: file;
begin
  {$I-}
  AssignFile(F, FileName);
  FileMode := 0;  { Datei mit Schreibschutz versehen }
  Reset(F);
  CloseFile(F);
  {$I+}
  FileIsThere := (IOResult = 0and (FileName <> '');
end;  { FileIsThere }

begin

  if FileIsThere(ParamStr(1)) then { Dateiname von Kommandozeile lesen }
    Canvas.TextOut(1010'File exists')
  else
    Canvas.TextOut(1010'File not found');
end;

Ich wäre froh, wenn ihr mein Weltbild wieder geraderücken würdet :mrgreen:!


Xentar - Mi 28.01.09 17:29

1. Es gibt keine If Schleife.. sondern nur If Abfragen. Sollte man doch nach über einem Jahr wissen? :P
2. Hä? Statt Result := ..... kann man auch schreiben <Funktionsname> := .... ist aber unschön. Kann zu Probleme führen, wenn man die Funktion mal umbenennt, außerdem find ich dies schwieriger lesbar.
3. Könnte man auch einfach FileExists verwenden. ;) aber dann wäre es ja kein Beispiel für Reset.


Mitmischer 1703 - Mi 28.01.09 17:35

Nein, mir geht es um das (IOResult = 0) and (FileName <> '') nach dem :=. Wieso geht das?


JayEff - Mi 28.01.09 17:37

user profile iconMitmischer 1703 hat folgendes geschrieben Zum zitierten Posting springen:
Nein, mir geht es um das (IOResult = 0) and (FileName <> '') nach dem :=. Wieso geht das?
Weil (IOResult = 0and (FileName <> '') eine Wahr/Falsch Aussage ist. Und was sind Wahr/Falsch Aussagen? Booleans. Und was ist der Rückgabewert der Funktion? Ein Boolean :mrgreen:

Genauso, wie du aBool := True; schreiben kannst, kannst du auch aBool := (1 = 1); schreiben. Ganz ähnlich funktioniert auch if (1 = 1) = true then aber das macht ja keiner, oder? ;)


jaenicke - Mi 28.01.09 17:40

Schau dir mal das an:
http://www.delphi-treff.de/tutorials/objectpascal/programmierung-mit-boolean-werten/


Mitmischer 1703 - Mi 28.01.09 17:41

Was ist denn, wenn das eine true und das andere false ist?


jaenicke - Mi 28.01.09 17:44

Wenn der Fernseher an ist und Sat.1 eingestellt ist, dann schalte um auf ARD.

Delphi-Quelltext
1:
2:
3:
4:
5:
var
  SwitchToArd: Boolean;
begin

  SwitchToArd := (TV.Status = staOn) and (TV.Sender = senSat1);
Dann wäre, wenn der Fernseher an, aber auf einem anderen Sender als Sat.1 ist, SwitchToArd danach False, genauso wie auch im deutschen Satz. ;-)

Denn (True and False) ist natürlich False.


BenBE - Mi 28.01.09 18:04

Zum Thema If-Schleifen [http://www.if-schleife.de/]


Mitmischer 1703 - Fr 30.01.09 21:56

Ja, sorry!