![]() |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Delphi-Quellcode:
Viel schöner wäre natürlich, wenn sie mal ein wenig bei Prism plündern würden :) .
foo(Default(TParams).paramA(1).paramF(120))
Delphi-Quellcode:
Und für etwas ältere Versionen: Wie wäre es mit einem einfachen
Foo(new Params(A = 1, F = 120));
Delphi-Quellcode:
:?:
foo(TParams.GetDefault.paramA(1)...
Zitat:
Code:
foo(1, c: 2);
Zitat:
|
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Zitat:
Delphi-Quellcode:
Aber ich bin mir nicht sicher ob das gemeint war :mrgreen:
var
params: TParams; begin params := TParams.Create; params.a := foo; params.b := bar; foo(params); // gleichbedeutend mit foo(TParams.getDefault.setA(foo).setB(bar)); end; |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Ich frage mich auch, wie eine Funktion aussehen soll, die einerseits eine Latte von Parametern akzeptiert, von denen alle optional sind, und andererseits so einfach gestrickt ist, das man sie nicht in mehrere Funktionen aufbrechen kann. Aber gut, vielleicht ist es auch nur eine Design- bzw. 'Best practice' Frage. |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
[add]
Delphi-Quellcode:
Oder das Ganze als Interface.
type
TParams = record //class function Create: TParams; static; constructor Create; function Default: TParams; function paramA(i: Integer): TParams; function paramB(i: Integer): TParams; function ParamList: TParams; private paramAValue: Integer; paramBValue: Integer; end; constructor TParams.Create; begin Default; end; function TParams.Default: TParams; begin Finalize(Self); FillChar(@Self, SizeOf(Self), 0); Result := Self; end; function TParams.paramA(i: Integer): TParams; begin paramAValue := i; Result := Self; end; function TParams.paramB(i: Integer): TParams; begin paramBValue := i; Result := Self; end; function TParams.ParamList: TParams; begin Result := Self; end; Als Interface wäre es Speichersparender. Also Objekt ginge zwar auch, aber da darf man dann das Freigeben nicht vergessen, welches bei einigen Aufrufvarianten unmöglich/schwer zu realisieren ist.
Delphi-Quellcode:
foo(TParams.Create.paramA(1).paramB(9));
var Params: TParams; Params.Default; // oder Params := TParams.Create; Params.paramA(1); Params.paramB(9); foo(Params); with TParams.Create do begin paramA(1); paramB(9); foo(ParamList); end; with TParams.Create do begin paramA(1); //foo(ParamList.paramB(9)); foo(paramB(9)); end; |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Code:
und nu?
result := list.select(foo).orderBy(bar).thenBy(bar2).intersect(wuppdi);
Zitat:
Your try. Zitat:
|
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Taucht ja in einigen deiner Posts auf. Das heißt alle Objekte (abgesehen von welchen in Interface-Typen), die du erstellst, musst du auch selbst wegräumen. |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
![]() Das hat man nun davon. Hat man die bessere Welt erstmal kennengelernt, gefällts einem in der anderen nicht mehr :stupid: |
Re: Über den Umgang mit vielen optionalen Parametern
Interfaces und Records, sowie dyn. Arrays und String räumen sich selber auf, bzw. Delphi macht dieses für einen.
Pointer und Objekte muß man manuell aufräumen seit D2006: mit einem Record geht es einfach und mit Interfaces isses Ergebnis "schöner" |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Zitat:
Zitat:
Code:
ist mir dann doch etwas zu "tricky" (und vor allem zu blöd zum Implementieren). Dann lieber
new Bar()
.AddItem(1) .AddItem(2) .WithOptions() .SetCached(true) .EndOptions()
Code:
Zwischen new TParams() und TParams.GetDefault sehe ich allerdings keinen großartigen Unterschied :| . In Ruby könnten wir es "gimme!" nennen :mrgreen: .
new Bar {
Items = { 1, 2 }, Options = new Options(cached: true) } |
Re: Über den Umgang mit vielen optionalen Parametern
Zitat:
Aber wieso eigentlich immer "zurecht"? Statt der TParams.GetDefault-Methode könnte man notfalls auch noch eine CreateParams-Funktion erstellen
Delphi-Quellcode:
type
TParams = record class function Create: TParams; static; function Default: TParams; function paramA(i: Integer): TParams; function paramB(i: Integer): TParams; function ParamList: TParams; private paramAValue: Integer; paramBValue: Integer; end; function CreateParams: TParams; function CreateParams: TParams; begin Result.Default; end; class function TParams.Create: TParams; begin Result.Default; end; function TParams.Default: TParams; begin Finalize(Self); FillChar(@Self, SizeOf(Self), 0); Result := Self; end; function TParams.paramA(i: Integer): TParams; begin paramAValue := i; Result := Self; end; function TParams.paramB(i: Integer): TParams; begin paramBValue := i; Result := Self; end; function TParams.ParamList: TParams; begin Result := Self; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 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-2025 by Thomas Breitkreuz