![]() |
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:
Hier sieht man, daß die Variablen lWert1,lWert2,lWert3 deklariert werden, obwohl diese eigendlich nicht gebraucht werden. Sieht unschön aus.
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; 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; |
Re: Procedure mit Variablen als Parameter
Wenn die Parameter alle vom selben Datentyp sind, hast Du nicht viele Möglichkeiten.
|
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:
Edit: Fehler (var) entfernt
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; |
Re: Procedure mit Variablen als Parameter
Dann aber besser ein Array of PDouble, das ist dann flexibler IMHO.
[edit] Oops, Kommentar überlesen, sry [/edit] |
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
|
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 ;)
|
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] |
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.
|
Re: Procedure mit Variablen als Parameter
hat sicht erledigt..
|
Re: Procedure mit Variablen als Parameter
Danke an alle. Schade, ich dachte es gibt eine elegante Möglichkeit.
Zitat:
Delphi-Quellcode:
Diese kann ich ja in der Funktion verwenden.
unit wirfweg;
var wirfwegDouble:double; wirfwegInteger:double; wirfwegString:double;
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. |
Re: Procedure mit Variablen als Parameter
Warum denn nicht so?
Delphi-Quellcode:
Mit vordinierten Variablen, wenn nicht vorhanden, dann wird der Defaultwert genommen.
procedure test(d1: double = 0; d3: Double = 1);
begin d1 := d1 + d3; ShowMessage(FloatToStr(d1)); end; procedure TForm1.Button1Click(Sender: TObject); begin test(2); end; procedure TForm1.Button2Click(Sender: TObject); begin test(0, 45); end; (nur zur Info: der Code oben funktioniert) Oder hab ich was falsches verstanden? |
Re: Procedure mit Variablen als Parameter
Das Problem ist, dass es sich um var-Parameter handelt.
|
Re: Procedure mit Variablen als Parameter
Zitat:
|
Re: Procedure mit Variablen als Parameter
Hallo,
das würde ich über eine eigene Klasse machen, die als Parameter übergeben wird. Heiko |
Re: Procedure mit Variablen als Parameter
Zitat:
Dann bleibe ich doch lieber bei den DummyVariablen. |
Re: Procedure mit Variablen als Parameter
Hallo,
wenn jetzt noch ein paar Variablen hinzukommen, sieht es anders aus. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:10 Uhr. |
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 by Thomas Breitkreuz