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 Problem bei logischer abfrage (https://www.delphipraxis.net/82269-problem-bei-logischer-abfrage.html)

Martin K 10. Dez 2006 00:08

Re: Problem bei logischer abfrage
 
Der Rückgabewert einer Funktion wird mit Result festgelegt.
Damit eine Funktion true zurück gibt, schreibst Du also einfach:
Delphi-Quellcode:
Result := true;
//Edit:
Ob das mit dem Namen der Funktion auch funktioniert, weiß ich nicht - sollte aber eigentlich :gruebel:
Aber einfach mal ausprobieren, indem Du einmal den Namen und einmal Result nimmst und dann guckst, was jeweils dabei raus kommt :wink:

Maja Jessica 10. Dez 2006 00:11

Re: Problem bei logischer abfrage
 
Hi,

getestet, und funktioniert so wie du es erwartest:


Delphi-Quellcode:

function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  if a = b then result := true else result := false;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if
  (cardexistsnoco(1,1)AND
   cardexistsnoco(2,2) AND
   cardexistsnoco(3,3333) AND
   cardexistsnoco(4,4) AND
   cardexistsnoco(5,5))
  or
  (cardexistsnoco(6,6)AND
   cardexistsnoco(7,7) AND
   cardexistsnoco(8,8) AND
   cardexistsnoco(9,9) AND
   cardexistsnoco(10,10)) then ShowMessage('fertig');
end;
MJ

richie_k 10. Dez 2006 00:14

Re: Problem bei logischer abfrage
 
oh - mein - gott..
war ne schwere geburt, aber ich hab den fehler.. danke an euch alle - war ein (dummer) denkfehler in einer schleife..
dass man auf sowas immer erst nach stundenlangem suchen kommt.. naja zumindest kann ich delphis logik den fehler nicht in die schuhe schieben ;)

Christian Seehase 10. Dez 2006 00:15

Re: Problem bei logischer abfrage
 
Moin Maja,

Du kannst auch gleich

Delphi-Quellcode:
Result := a = b;
schreiben.

Martin K 10. Dez 2006 00:19

Re: Problem bei logischer abfrage
 
Hab Majas Beispiel anstatt mit result mal mit dem Namen der Funktion getestet und es funktioniert genuso!
Der einzige Vorteil von Result ist wohl, dass es auch noch funktioniert, wenn die Funktion umbenannt wurde :gruebel:

Maja Jessica 10. Dez 2006 00:22

Re: Problem bei logischer abfrage
 
Zitat:

Zitat von Christian Seehase
Moin Maja,

Du kannst auch gleich

Delphi-Quellcode:
Result := a = b;
schreiben.

Ja, stimmt. :-D Ist auch eine Möglichkeit.
Delphi-Quellcode:
function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  result := a = b;
end;
oder wie Martin K schrieb über den Namen der function

Delphi-Quellcode:
function cardexistsnoco(a,b : integer) : boolean;
begin
  showMessage('Bin bei '+IntToStr(a));
  cardexistsnoco := a = b;
end;
Was ist nun die "beste Version"?

Grüsse, MJ

mkinzler 10. Dez 2006 00:25

Re: Problem bei logischer abfrage
 
Zitat:

Was ist nun die "beste Version"?
Eigentliche keine die Version über den Namen der Funktion ist die klassische von Pascal, das Schlüsselwort result wurde in Delphi eingeführt.

Christian Seehase 10. Dez 2006 00:34

Re: Problem bei logischer abfrage
 
Moin Maja,

spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst, wirst Du den Funktionsnamen nicht mehr verwenden können, da, z.b., die Benutzung auf der rechten Seite eines := als Funktionsaufruf interpretiert wird.

Die Verwendung von Result finde ich aber auch aus Gründen der Dokumentation sinnvoll, was besonders bei rekursiven Funktionen interessant wird.

mkinzler 10. Dez 2006 00:36

Re: Problem bei logischer abfrage
 
Zitat:

spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst,
Das sollte man mit result aber auch nicht machen.

Martin K 10. Dez 2006 00:42

Re: Problem bei logischer abfrage
 
Zitat:

Zitat von mkinzler
Zitat:

spätestens, wenn Du das Ergebnis innerhalb der Funktion noch weiterverwenden willst,
Das sollte man mit result aber auch nicht machen.

Warum nicht?

So steht es in der Delphi-Hilfe:
Zitat:

Zitat von Delphi-Hilfe
Sie können der Variablen Result oder dem Funktionsnamen im Anweisungsblock mehrmals einen Wert zuweisen. Die zugewiesenen Werte müssen jedoch dem deklarierten Rückgabetyp entsprechen. Sobald die Ausführung der Funktion beendet wird, bildet der Wert, der zuletzt der Variablen Result oder dem Funktionsnamen zugewiesen wurde, den Rückgabewert der Funktion. Zum Beispiel:
Delphi-Quellcode:
function Power(X: Real; Y: Integer): Real;
var
  I: Integer;
begin
  Result := 1,0;
  I := Y;
  while I > 0 do
   begin
    if Odd(I) then Result := Result * X;
    I := I div 2;
    X := Sqr(X);
   end;
end;
Result und der Funktionsname repräsentieren immer denselben Wert. Deshalb gibt die Deklaration
Delphi-Quellcode:
function MyFunction: Integer;
begin
  MyFunction := 5;
  Result := Result * 2;
  MyFunction := Result + 1;
end;
den Wert 11 zurück. Result ist jedoch nicht mit dem Funktionsnamen identisch. Wenn der Funktionsname auf der linken Seite einer Zuweisungsanweisung verwendet wird, verwaltet der Compiler den Funktionsnamen als Variable (wie Result) zur Aufzeichnung des Rückgabewerts. Taucht der Funktionsname dagegen an einer anderen Stelle im Anweisungsblock auf, wird er vom Compiler als rekursiver Aufruf der Funktion interpretiert. Result kann dagegen als Variable in Operationen eingesetzt werden, beispielsweise bei Typkonvertierungen, in Konstruktoren, Indizes und in Aufrufen anderer Routinen.

Wenn die Ausführung einer Funktion beendet wird, bevor Result oder dem Funktionsnamen ein Wert zugewiesen wurde, ist der Rückgabewert der Funktion nicht definiert.



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

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