AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Funktionen immer mit höchstens einem Parameter
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionen immer mit höchstens einem Parameter

Ein Thema von Tyrael Y. · begonnen am 20. Aug 2009 · letzter Beitrag vom 20. Aug 2009
Antwort Antwort
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#1

Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 12:47
Hallo zusammen,
es geht hier um eine grundsätzliche Vorgehensweise beim programmieren.

Jede Funktion/Prozedur erhält immer höchstens einen Parameter.
Egal ob von aussen in die Funktion ein oder mehrere Objekte/Werte zugewiesen werden müssen,
es wird immer ein Objekt einer Transporter Klasse erzeugt und dieses Objekt ist der Parameter.

Delphi-Quellcode:
type
  TMyTransporter = class
    ...
  public
    ...
    property Count: Integer read GetCount write SetCount;
    property Text: String read GerText write SetText;
end;


...
procedure TOtherClass.DoSomething(AValue: TMyTransporter);
begin
  ...
end;
...

Was haltet ihr von solch einer Vorgehensweise?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 12:53
Nix?

Was meinst Du mit jeder Funktion? Alle zukünftigen Funktionen/Proceduren Deiner Klassen und Hilfsrotinen?

Also stelle mir das sehr übel vor (sofern ich das richtig verstanden habe)... Raterei, welche Werte die Funktion braucht, da keine sprechenden Parameter... haufenweise Prüfungen in den Funktionen (Reihenfolge der Parameter, Wertegültigkeit, Anzahl etc.)

Evtl. müsstest Du die Idee auch noch etwas genauer beschreiben. So wie es jetzt für mich klingt, klingt es nicht sehr sinnvoll.

Wenn eine Funktion mehr als 3 Parameter hat und häufiger aufgerufen werden soll, dann entwerfe ich einen ParameterRecord, der übergeben wird (vgl. WinApi)
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 12:54
Ich denke man sollte sich nicht konkret auf Anzahl der Parameter festlegen, jedoch finde ich eine Kapselung von Informationen in Klassen grundsätzlich erstmal gut. Außerdem sollte jede Klasse ihre eigene Aufgabe haben. Wenn die Klassen sozusagen "lose gekoppelt" sind ist es meiner Ansicht nach kein stilistisches Verbrechen auch mehrere Parameter pro Methode zuzulassen.

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 13:08
Zitat von Satty67:
Was meinst Du mit jeder Funktion? Alle zukünftigen Funktionen/Proceduren Deiner Klassen und Hilfsrotinen?
Ja ich rede von meinen eigenen Klassen.

Zitat von Satty67:
Also stelle mir das sehr übel vor (sofern ich das richtig verstanden habe)... Raterei, welche Werte die Funktion braucht, da keine sprechenden Parameter... haufenweise Prüfungen in den Funktionen (Reihenfolge der Parameter, Wertegültigkeit, Anzahl etc.)
Jede Transporterklasse wäre für die entsprechende Funktion zugeschnitten.
Prüfungen können direkt innerhalb der Set-Methode der Transporter-Klasse durchgeführt werden.
Der Zugriff innerhalb der Funktion läuft dann genauso, als würdest du die Werte als Parameter übergeben.

Zitat von Satty67:
Wenn eine Funktion mehr als 3 Parameter hat und häufiger aufgerufen werden soll, dann entwerfe ich einen ParameterRecord, der übergeben wird (vgl. WinApi)
In Prinzip ist es nichts anderes als was ich gerade beschreibe.


Edit:
Ein Beispiel, worum es mir eigentlich geht.
Stellt euch vor ihr habt eine Klasse in der es eine Funktion gibt um TCP Netzwerkverbindungen aufzubauen. Diese Funktion erhält einen Parameter von einer Klasse, die TCP Verbindungsinformationen als properties besitzt(IP bzw. Hostname, Port, usw.)

Ihr entwickelt irgendwann eine neue Klasse, diese Klasse braucht weswegen auch immer auch diese Informationen. Statt in beiden Funktionen eine Liste an Parametern einzubauen, wäre es nun möglich bei beiden Funtionen ein Objekt dieser Transportklasse zu übergeben.

Natürlich geht auch der Weg, daß man solch eine Funktion als eine neue Klasse konzipiert wird und diese Parameter als properties dieser Klasse zur Verfügung stellen könnte.
Auch ein schöner Weg wie ich finde.

Es gibt halt mehrere Wege. Ich sage nicht der Weg ist gut oder schlecht, sondern möchte gerne Meinungen hören.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 13:25
Zitat von Tyrael Y.:
Zitat von Satty67:
Wenn eine Funktion mehr als 3 Parameter hat und häufiger aufgerufen werden soll, dann entwerfe ich einen ParameterRecord, der übergeben wird (vgl. WinApi)
In Prinzip ist es nichts anderes als was ich gerade beschreibe.
Das ist für eine Vielzahl von Fällen auch sinnvoll, aber man sollte nicht für jede Funktion, die mehrere Eingabe verarbeitet einen ParameterRecord oder eine ParameterKlasse entwerfen, finde ich. z.B. eine Funktion, die zwei TMyTransporter entgegennimmst wäre es nicht unbedingt sinnvoll diese beiden Klasse nochmal in eine Klasse zu kapseln...
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 14:07
Das größte Problem dürfte die Verwendung deiner Klassen sein. Du müsstest Dir für jeden Aufruf eine Transporter-Instanz erstellen, diese befüllen, deine Funktion aufrufen und dann den Transporter wieder freigeben. Was hat das für einen Sinn, außer den Code aufzublähen und deinen Anwendung fehleranfälliger und extrem unperformant zu machen?

Auch die Vorgehensweise von Satty67 halte ich für überflüssig (Bei mehr als drei Parametern einen Record definieren). Normalerweise ist es ein Designfehler, eine Funktion mit vielen Unabhängigen zu erstellen. Dann sollte man eine Klasse erstellen, die diese Funktion implementiert und die Parameter über die Properties befüllen. 'Normalerweise' bedeutet natürlich, das es auch Ausnahmen gibt.

Eine Funktion mit vielen Parametern ist i.A. so komplex, das es eben eine eigene Klasse gehört.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 15:55
Ich finde eigentlich, dass es sehr viele Funktionen gibt, die mehr als ein Parameter brauchen. Man sieht die oft nur nicht, weil die bereits in einem Standard ParameterRecord versteckt sind (z.B. TRect).

Das Beispiel von Tyrael mit Connection-Daten ist ja auch typisch für viele Parameter, wo die Funktion u.U. nicht andres macht, als Connecten. Aber das zeigt auch, was wohl alzaimar gemeint hat. TConnection ist eine Klasse, die mit properties gefüllt wird und eine Methode connect besitzt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 16:00
Also ich finde soetwas lohnt sich nur, wenn die Funktion mehrmals/oft aufgerufen wird, sich nur wenige Parameter ändern und zwischendurch die Parameter nicht freigegeben werden.

Wem dabei das Speichermanagement von Objekten nicht gefällt, der kann ja auch einen Record verwenden, die Felder ins Private verschieben und den Zugriff via Properties ermöglichen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Funktionen immer mit höchstens einem Parameter

  Alt 20. Aug 2009, 16:02
Zitat von Tyrael Y.:
Natürlich geht auch der Weg, daß man solch eine Funktion als eine neue Klasse konzipiert wird und diese Parameter als properties dieser Klasse zur Verfügung stellen könnte.
Auch ein schöner Weg wie ich finde.
Sag ich ja auch.
Es macht ja auch Sinn in solchen Fällen statt einer "großen" Funktion eine "kleine" Klasse zu erstellen.

Ich gebe zu ich benutze oft beides.
Meist fange ich mit dem Weg der einzelen Funktion mit einem "Transporter" Objekt als Parameter an und bei weiteren Erweiterungen wird aus solch einer Funktion eine neue Klasse.
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:14 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