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?