Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Function mit mehreren Rückgabewerten (https://www.delphipraxis.net/157726-function-mit-mehreren-rueckgabewerten.html)

SyntaxXx 22. Jan 2011 14:14

AW: Function mit mehreren Rückgabewerten
 
Das habe ich einfach nur aus dem Kopf geschrieben und sollte auch nur zur Veranschaulichung dienen.

Aber ok.

hans ditter 22. Jan 2011 16:35

AW: Function mit mehreren Rückgabewerten
 
ich kann mich den anderen Usern nur anschließen. Nutz eine Prozedur, wenn du mehrere Rückgabewerte brauchst.
Ist einfache und weeeeeeeesentlich schöner... :wink:

mkinzler 22. Jan 2011 21:05

AW: Function mit mehreren Rückgabewerten
 
Oder eine Funktion mit Status als Rückgabewert

Elvis 22. Jan 2011 21:54

AW: Function mit mehreren Rückgabewerten
 
Gibt es eigentlich irgendeinen speziellen Grund, warum es hier normal zu sein scheint, reine Ausgabeparameter als "var" anstatt als "out" zu deklarieren?
Soll der Aufrufende nicht sehen können, dass er da gar nix reinpacken muss?

sx2008 23. Jan 2011 14:12

AW: Function mit mehreren Rückgabewerten
 
Mach' ne Klasse draus, dann lösen sich die Probleme in Luft auf!

nettoplus 10. Dez 2024 11:04

AW: Function mit mehreren Rückgabewerten
 
@SyntaxXx schreibt:
Zitat:

Ich habe nun eine eigene function geschriebenm, inder ich aber mehrere Rückgabewerte bekomme.
Jetzt ist die Frage, wie ich auf diese zugreifen kann, da ja Result nur einen Wert wiedergibt?

Um es ein wenig zu vereinfachen hier ein kleines Beispiel (Nur gerade aus den kopf geschrieben)

markierenCode:
function MoreResults:string;
begin
a := 1;
b := 2;
end;
Diese Anfrage ist schon ziemlich alt, seit dem hat sich bei Delphi viel neu entwickelt. Deswegen beschloss ich die Antworten etwas zu ergänzen.
Schließlich bleibt es im net länger und andere lesen das gerne.
Also als Funktionsergebnis kann man ein Record oder ein Array nehmen. Wie das geht, zeigt dieses Beispiel:
Delphi-Quellcode:
interface

type
dreierOut: Array[1..3] of integer;

function MoreResults:dreierOut;
procedure berechneWas;

var
Ergebnis: dreierOut;
Result: integer;


implementation

function TForm1.MoreResults:dreierOut;
var
a, b, c : integer;
begin
a := 49;
b := 12;
c := 66;
dreierOut[1] := a;
dreierOut[2] := b;
dreierOut[3] := c;
end;

procedure TForm1.berechneWas;
begin
…
Ergebnis:= MoreResults;
// oder:
Result:= MoreResults[1];
end;

himitsu 10. Dez 2024 14:19

AW: Function mit mehreren Rückgabewerten
 
Zitat:

Zitat von nettoplus (Beitrag 1544075)
Delphi-Quellcode:
interface

var
Ergebnis: dreierOut;
Result: integer;

procedure TForm1.berechneWas;

Globale Variable: NEIN, schäm dich :!: :warn:


* als VAR-Parameter, OUT-Parameter (Letzters nur für einfache Typen, ala Integer ... NICHT für String)
* als Result geht es natürlich auch
* oder als Feld (Variable) in einer Klasse, wenn man Variablen und diese Funktion/Prozedur darin verpackt
* oder ...

freimatz 10. Dez 2024 14:40

AW: Function mit mehreren Rückgabewerten
 
Zitat:

Zitat von himitsu (Beitrag 1544085)
* oder ...

Im Result ein Datentransfer-Objekt

Zitat:

Zitat von Elvis (Beitrag 1076597)
Gibt es eigentlich irgendeinen speziellen Grund, warum es hier normal zu sein scheint, reine Ausgabeparameter als "var" anstatt als "out" zu deklarieren?

das out wurde erst später in Delphi implementiert. Also ich vermute eines dieser drei: Gewohnheit, Faulheit und/oder Ignoranz.

Zitat:

Zitat von Elvis (Beitrag 1076597)
Soll der Aufrufende nicht sehen können, dass er da gar nix reinpacken muss?

Ich meine Ja.
Ich selber verwende aber weder var noch out, sonder benutze wie hier schon angesprochen immer Funktionen.

himitsu 10. Dez 2024 14:49

AW: Function mit mehreren Rückgabewerten
 
Und z.B. ein String, Variant, DynArray und Interface sind gemanagte Typen, wo die Variable "initialisiert" sein muß, da Delphi den Speicher automatisch verwaltet.

Solche Typen passen da nicht zur Philosophie des OUT und OUT würde (eigentlich) das Speichermanagement schrotten.


Für sowas nutze ich dann einfach Attribute oder Kommentare, als "Dokumentation".
Delphi-Quellcode:
procedure GibMir([out] Variable: string);

procedure GibMir({out} Variable: string);

/// <summary> gibt mir eine Variable </summary>
/// <param name="Variable"> [OUT] hier rein </param>
procedure GibMir(Variable: string);

Hobbycoder 10. Dez 2024 14:59

AW: Function mit mehreren Rückgabewerten
 
Man könnte auch für die Rückgabe eine Klasse oder einen Record nutzen, wenn man keine VAR oder OUT in den Parametern nutzen will.

Delphi-Quellcode:
type
  TBackData=class
    a: Integer;
    b: Integer;
    c: Integer;
  end;

function berechneirgendwas(x, y: Integer): TBackData;
begin
  Result:=TBackData.Create;
  Result.a:=x*y;
  Result.b:=x+y;
  Result.c:=x-y;
end;

procedure irgendwo;
var
  backdata: TBackData;
begin
  backdata:=berechneirgendwas(10, 5);
  try
    // mach irgendwas mit den Daten
  finally
    backdata.free;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 Uhr.
Seite 2 von 4     12 34      

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