Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Funktion mit mehreren Rückgabewerten


soisseteben - Mo 26.06.06 20:49
Titel: Funktion mit mehreren Rückgabewerten
ist es möglich eine Funktion o.ä. so zu gestalten, das sie mehrere Rückgabewerte liefert. Wenn ja, wie deklariert und nutz ich die dann?

danke im vorraus!


jasocul - Mo 26.06.06 20:54

Der Rückgabewert eine Funktion ist nur einer.
Du kannst aber einen Parameter als Var-Parameter übergeben und dort die neunen Werte eintragen:

Delphi-Quelltext
1:
2:
3:
4:
5:
Function Differenz (var Summe : Integer; Wert1, Wert2 : Integer) : Integer;
begin
  Result := Wert1-Wert2;
  Summe := Wert1+Wert2;
end;


soisseteben - Mo 26.06.06 21:00

danke! und wie nutz ich 'summe' dann in der Prozedur, wo ich diese Funktion aufrufe (wie les ich den in eine Variable ein?)


mkinzler - Mo 26.06.06 21:03

Die variable, die du der Funktion übergibst hat nach dem Aufruf automatisch den Wert, da ja by-reference übergeben wird.


root_at_localhost - Mo 26.06.06 21:06

zum beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Function Differenz (var Summe : Integer; Wert1, Wert2 : Integer) : Integer;
begin
  Result := Wert1-Wert2;
  Summe := Wert1+Wert2;
end;

var
  a, b : integer;
begin
  a := Differenz(b, 21);
end.

Danach hast du in a die Differenz, also 1, und in b die Summe, also 3 stehen. Zu beachten bleibt halt, dass der erste Parameter von Differenz immer eine Variable sein muss, Konstanten wie Differenz(3, 2, 1) sind natürlich nicht möglich...


jasocul - Mo 26.06.06 21:08


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
ErgebnisSumme, ErgebnisDifferenz, a, b : Integer;
begin
  a := 50;
  b := 180;
  ErgebnisDifferenz := Differenz(ErgebnisSumme, a, b);
  ShowMessage('Differenz: ' + IntToStr(ErgebnisDifferenz));
  ShowMessage('Summe: ' + IntToStr(ErgebnisSumme));
end;


soisseteben - Mo 26.06.06 21:48

Danke an mkinzler, das macht Sinnn und klappt. (und natürlich auch Danke an die anderen, aber irgentwie waren eure Bsp nicht genau auf mein Problem zugeschnitten)


jasocul - Di 27.06.06 08:56

Natürlich nicht. Du hast ja auch eine sehr allgemeine Frage gestellt. Übertragen auf dein Problem, musst du es wohl selbst.