AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Function mit mehreren Rückgabewerten
Thema durchsuchen
Ansicht
Themen-Optionen

Function mit mehreren Rückgabewerten

Ein Thema von SyntaxXx · begonnen am 22. Jan 2011 · letzter Beitrag vom 13. Dez 2024
Antwort Antwort
Seite 2 von 3     12 3      
SyntaxXx

Registriert seit: 14. Dez 2008
328 Beiträge
 
Delphi XE4 Architect
 
#11

AW: Function mit mehreren Rückgabewerten

  Alt 22. Jan 2011, 15:14
Das habe ich einfach nur aus dem Kopf geschrieben und sollte auch nur zur Veranschaulichung dienen.

Aber ok.
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: Function mit mehreren Rückgabewerten

  Alt 22. Jan 2011, 17:35
ich kann mich den anderen Usern nur anschließen. Nutz eine Prozedur, wenn du mehrere Rückgabewerte brauchst.
Ist einfache und weeeeeeeesentlich schöner...
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Function mit mehreren Rückgabewerten

  Alt 22. Jan 2011, 22:05
Oder eine Funktion mit Status als Rückgabewert
Markus Kinzler
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#14

AW: Function mit mehreren Rückgabewerten

  Alt 22. Jan 2011, 22:54
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?
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#15

AW: Function mit mehreren Rückgabewerten

  Alt 23. Jan 2011, 15:12
Mach' ne Klasse draus, dann lösen sich die Probleme in Luft auf!
  Mit Zitat antworten Zitat
nettoplus

Registriert seit: 17. Nov 2012
Ort: Hessen, Deutschland
3 Beiträge
 
Delphi 10.3 Rio
 
#16

AW: Function mit mehreren Rückgabewerten

  Alt 10. Dez 2024, 12:04
@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;
Marian

Geändert von TBx (10. Dez 2024 um 12:18 Uhr) Grund: Delphi-Tags eingefügt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#17

AW: Function mit mehreren Rückgabewerten

  Alt 10. Dez 2024, 15:19
Delphi-Quellcode:
interface

var
Ergebnis: dreierOut;
Result: integer;

procedure TForm1.berechneWas;
Globale Variable: NEIN, schäm dich


* 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 ...
$2B or not $2B
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.456 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Function mit mehreren Rückgabewerten

  Alt 10. Dez 2024, 15:40
Im Result ein Datentransfer-Objekt

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.

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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

AW: Function mit mehreren Rückgabewerten

  Alt 10. Dez 2024, 15:49
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);
$2B or not $2B

Geändert von himitsu (10. Dez 2024 um 15:55 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
961 Beiträge
 
#20

AW: Function mit mehreren Rückgabewerten

  Alt 10. Dez 2024, 15:59
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;
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz