Einzelnen Beitrag anzeigen

Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Über den Umgang mit vielen optionalen Parametern

  Alt 1. Apr 2010, 19:56
Thread zur Steigerung der Codequalität Nr. 2....

Ich denke fast jeder kennt das Problem... ich habe hier z.B. eine Funktion mit 4 optionalen Parametern (von denen 3 auch noch typgleich sind - Zahlen frei erfunden ). Mit dem klassischen Versuch:
Delphi-Quellcode:
function foo(a): z;
function foo(a, b): z;
function foo(a, b, c): z;
und der Weiterleitung der parameterarmen Funktionsrufen an die parameterreichen kommt man da schnell nicht mehr weiter - zumindest nicht schön.

Also habe ich mir überlegt... man erstellt sich einen Record mit einem Feld pro Parameter.
Delphi-Quellcode:
TParams = record
  paramAValue: integer;
  paramBValue: integer;
  paramCValue: integer;
  function paramA(i: Integer): TParams;
  ...
end;

TParams.paramA(i: Integer): TParams;
begin
  Result := Clone(self);
  Result.paramAValue := i;
end;
Verwenden könnte man das ganze dann so:
Delphi-Quellcode:
var
  params: TParams;
begin
  result := foo(params.paramA(1).paramF(120));
Allerdings ist das auch noch blöd, wegen der zwingend nötigen params-Variable. Die will man ja möglichst auch noch loswerden.

Ideal wäre also sowas (WAS LEIDER NICHT ZU GEHEN SCHEINT)
Delphi-Quellcode:
TParams = class
  paramAValue: Integer;
  ...
  function paramA(i: Integer): TParams;
  ...
  class function paramA(i: Integer): TParams;
Da könnte man dann auch schön beim Aufruf der Klassenmethoden die Felder mit default-werten belegen (denn das ist dann ja eindeutig die Stelle wo ein neues Objekt erzeugt wird). Verwenden könnte man es dann einfach so:
result := foo(TParams.paramA(5)); Nunja... das scheitert schon allein daran, dass man keine gleichnahmigen class/instance-Methods anlegen kann (Smalltalk kann das )

Soo... was haltet ihr allgemein von der Idee? Habt ihr irgendwelche anderen / besseren / zielführenderen?
  Mit Zitat antworten Zitat