Nun ja...Dann ist es der sogenannte
DRY KISS
So so, wenn Du das so implementieren willst, bitte sehr.
Hier wird genau einmal geparst.
Delphi-Quellcode:
Function ParameterIndex (aText, aParam : String) : Integer;
Begin
if ParamDictionary.Contains(aParam) then
result := ParamDictionary[aParam]
else begin
result := FindParam(aText,aParam);
ParamDictionary.Add(aParam, Result);
end
end;
PS: Was ist eigentlich das Gegenteil von DRY KISS? Der WET FART?
Im Ernst: DRY ist ja ganz nett als Programmierparadigma. Aber wenn ich dann schlechter lesbaren Code produziere, dann muss ich mich entscheiden. Ich persönlich kann mit diesen kombinierten Sachen nichts anfangen. Und über den besten Code kann man vortrefflich streiten (oder ein Bier aufmachen).
Es kommt auf die Implementierung an. Wichtig ist, das ich vorne ein einfaches und minimales Interface habe. Was ich damit anstelle ('TryGet' etc.) ist dann etwas anderes.
Edit: Und natürlich ist der Ansatz, das ganze einmal zu parsen ('TryParse'), im Sinne von DRY optimal. Aber DRY ist nicht alles. Es gibt auch noch den 'Clean Code' Ansatz (dessen eine Facette DRY ist). Beides komplett unter einen Hut zu bekommen, ist manchmal nicht so leicht.
Letztendlich würde man hier den Parameter in den Vordergrund stellen, eine entsprechend Klasse entwicklen, die sich aus dem Text einmalig die Position ermittelt. Und dann diesem Parameter die hier vorgestellten Methoden 'Exists' (aka 'HasParameter') und 'Value' spendieren. Hier haben wir ja aus einer einfachen Idee ('Richtig machen') auf prozeduraler Ebene versucht, moderne Konzepte anzuwenden. Das geht nicht ohne Weiteres.