AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Procedure mit Variablen als Parameter

Ein Thema von bernau · begonnen am 14. Okt 2008 · letzter Beitrag vom 15. Okt 2008
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:35
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;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:43
Wenn die Parameter alle vom selben Datentyp sind, hast Du nicht viele Möglichkeiten.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:48
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
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:51
Dann aber besser ein Array of PDouble, das ist dann flexibler IMHO.

[edit] Oops, Kommentar überlesen, sry [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jmd anders

Registriert seit: 13. Mai 2004
84 Beiträge
 
#5

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:51
du könntest anstatt der einzelnen werte eine datenstruktur übergeben, in der du dann nur immer die werte initialisierst, die du brauchst
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:52
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
  Mit Zitat antworten Zitat
Scooty78

Registriert seit: 3. Jul 2008
Ort: Düren
41 Beiträge
 
RAD-Studio 2009 Ent
 
#7

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:53
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 [/edit]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:54
Bei 5 Parametern überladen? Da würde ich es lieber so lassen, wär ja ein riesiger Aufwand im Vergleich zum Nutzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
jmd anders

Registriert seit: 13. Mai 2004
84 Beiträge
 
#9

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 18:57
hat sicht erledigt..
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Procedure mit Variablen als Parameter

  Alt 14. Okt 2008, 20:18
Danke an alle. Schade, ich dachte es gibt eine elegante Möglichkeit.

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.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:24 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