Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Procedure mit Variablen als Parameter (https://www.delphipraxis.net/122351-procedure-mit-variablen-als-parameter.html)

bernau 14. Okt 2008 18:35


Procedure mit Variablen als Parameter
 
Gibt es eine Möglichkeit eine Procedure mit Variablen Parametern zu definieren, ohne daß alle Variablen genutzt werden müssen?

OK. Schwer zu erklären und schwer zu verstehen. Ich versuche es mal anhand von Beispielen zu erklären.

Es ist folgende Procedure definiert.

Delphi-Quellcode:
procedure TMeinObject.EineKomplexeBerechnung(var aWert1:double; var aWert2:double; var aWert3:double; var aWert4:double; var aWert5:double);
begin
  // hier viele Schleifen und viel Berechnung
  // Den Variablen aWert1,aWert2,aWert3,aWert4,aWert5 werden hier berechnete Werte zugewiesen
end;

Diese Procedure wird im Programm öffters mal aufgerufen. Je nachdem benötige ich alle Werte, sehr oft aber auch nur z.B aWert3 und aWert4. Da die Werte aber als Variable in der Procedure definiert sind, muss ich natürlich auch Variablen bereitstellen, obwohl ich diese nicht brauche.

Beispiel

Delphi-Quellcode:
Procedure TMeinObject.EineBerechnung;
var
  lWert1:double;
  lWert2:double;
  lWert3:double;
  lWert4:double;
  lWert5:double;
begin
  EineKomplexeBerechnung(lWert1,lWert2,lWert3,lWert4,lWert5);
  BerechneIrgendwasX(lWert4);
  BerechneIrgendwasX(lWert5);
end;
Hier sieht man, daß die Variablen lWert1,lWert2,lWert3 deklariert werden, obwohl diese eigendlich nicht gebraucht werden. Sieht unschön aus.

Gibt es eine Möglichkeit die Procedure so zu definieren, daß ich so eine Art NIL übergeben kann. Nennen wir es einfach mal xNil

Beispiel

Delphi-Quellcode:
Procedure TMeinObject.EineBerechnung;
var  
  lWert4:double;
  lWert5:double;
begin
  EineKomplexeBerechnung(xNil,xNil,xNil,lWert4,lWert5);
  BerechneIrgendwasX(lWert4);
  BerechneIrgendwasX(lWert5);
end;

DeddyH 14. Okt 2008 18:43

Re: Procedure mit Variablen als Parameter
 
Wenn die Parameter alle vom selben Datentyp sind, hast Du nicht viele Möglichkeiten.

sirius 14. Okt 2008 18:48

Re: Procedure mit Variablen als Parameter
 
Klar geht das. Wie bei den API-funktionen eben nicht "var" nehmen sondern einen Zeiger auf deine Variable, hier PDouble:
Delphi-Quellcode:
procedure TMeinObject.EineKomplexeBerechnung(aWert1:Pdouble; aWert2:Pdouble; aWert3:Pdouble; aWert4:Pdouble; aWert5:Pdouble); //hier würde ja auch ein array of PDouble gehen
begin

end;

Procedure TMeinObject.EineBerechnung;
var
  lWert4:double;
  lWert5:double;
begin
  EineKomplexeBerechnung(nil,nil,nil,@lWert4,@lWert5);
  ...
end;
Edit: Fehler (var) entfernt

DeddyH 14. Okt 2008 18:51

Re: Procedure mit Variablen als Parameter
 
Dann aber besser ein Array of PDouble, das ist dann flexibler IMHO.

[edit] Oops, Kommentar überlesen, sry [/edit]

jmd anders 14. Okt 2008 18:51

Re: Procedure mit Variablen als Parameter
 
du könntest anstatt der einzelnen werte eine datenstruktur übergeben, in der du dann nur immer die werte initialisierst, die du brauchst

Dax 14. Okt 2008 18:52

Re: Procedure mit Variablen als Parameter
 
Ich glaube, hier geht es eher um die Existenz eines "wirf weg"-Parameters (_ in Nemerle): sowas gibt es nicht, du kannst deine Methoden höchsten überladen ;)

Scooty78 14. Okt 2008 18:53

Re: Procedure mit Variablen als Parameter
 
Da du Deine Variablen alle als Referenz erwartest, wird das nicht gehen, sonst hättest Du im Prozedurkopf eine Defaultwert definieren können.
Vielleicht kannst Du Deine Prozedur ein bischen dynamischer gestalten, indem Du vielleicht in Array of Double übergibst?!?
[edit]Ups, da war schon jemand schneller :thumb: [/edit]

DeddyH 14. Okt 2008 18:54

Re: Procedure mit Variablen als Parameter
 
Bei 5 Parametern überladen? Da würde ich es lieber so lassen, wär ja ein riesiger Aufwand im Vergleich zum Nutzen.

jmd anders 14. Okt 2008 18:57

Re: Procedure mit Variablen als Parameter
 
hat sicht erledigt..

bernau 14. Okt 2008 20:18

Re: Procedure mit Variablen als Parameter
 
Danke an alle. Schade, ich dachte es gibt eine elegante Möglichkeit.

Zitat:

Zitat von Dax
Ich glaube, hier geht es eher um die Existenz eines "wirf weg"-Parameters (_ in Nemerle): sowas gibt es nicht, du kannst deine Methoden höchsten überladen ;)

Du hast mich da auf eine Idee gebracht:

Delphi-Quellcode:
unit wirfweg;

var
  wirfwegDouble:double;
  wirfwegInteger:double;
  wirfwegString:double;
Diese kann ich ja in der Funktion verwenden.

Delphi-Quellcode:
Procedure TMeinObject.EineBerechnung;
var  
  lWert4:double;
  lWert5:double;
begin
  EineKomplexeBerechnung(wirfwegDouble,wirfwegDouble,wirfwegDouble,lWert4,lWert5);
  BerechneIrgendwasX(lWert4);
  BerechneIrgendwasX(lWert5);
end;

Vieleicht einen besseren Namen ausdenken :-)

Ich denke mal dann ist das gut so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:53 Uhr.
Seite 1 von 2  1 2      

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