Ich hatte mich fast schon damit abgefunden und die Mindestversion beinah auf XE3 festgelegt.
War schon dabei einige Funktionen auf die neuen Helper umzuschreiben, aber da gibt es ein paar Probleme.
Man sollte besser nicht in die Helper schauen, was die für Mist bauen.
- Fast alles arbeitet mit Index 0,
- bis auf S.Chars[i]
, denn das arbeitet mit 1 oder 0, genauso wie S[i]
.
Delphi-Quellcode:
function TStringHelper.GetChars(Index: Integer): Char;
begin
Result := Self[Index];
end;
- Man denkt dort gibt es "optimierte" Stringfunktionen, aber Chars werden erst nach String umgewandelt und arbeiten dann doch wieder mit den alten Funktionen.
Ein Replace mit Char->Char könnte so wunderschön implementiert sein.
- Alles leitet nur auf die alten Funktionen um, dabei ergäbe es andersrum optimaleren/kürzeren Code.
- An vielen Stellen fehlt ein inline;
und man bekommt teilweise Results, bzw. zusätzliche temporäre Variablen, die bissl was Anderes machen, als man denken könnte.
Delphi-Quellcode:
S.Insert(3, 'xx'); // geht
S.Insert(3, 'xx').Insert(7, 'zz'); // geht nur halb
S := S.Insert(3, 'xx').Insert(7, 'zz'); // geht, aber kopiert sinnlos umher
Insert(S, 'xx', 3); Insert(S, 'zz', 7); // macht genau das, was es soll
- Wieso ist Format nur als Class-Funktion deklariert?
S := '%d'; ShowMessage(S.Format([123]));
könnte nett sein.
- Warum um Himmels Willen zeigt die Codevervollständigung nicht an, was Class-Function ist und was nicht?
- Und natürlich das Problem mit den mehreren Class-Helpern an einem Typ, was ja immernoch nicht funktioniert.
Das heißt also QCs schreiben und hoffen es ist irgendwann wirklich mal "verständlich" nutzbar.