Jakie jest najlepsze podejście, proste połączenie ciągów lub string.format
?Ciąg konkatenacji VS format string
Na przykład, co jest lepsze w użyciu:
s:=v1+' '+v2
lub
s:=format('%S %S',[v1,v2])
Jakie jest najlepsze podejście, proste połączenie ciągów lub string.format
?Ciąg konkatenacji VS format string
Na przykład, co jest lepsze w użyciu:
s:=v1+' '+v2
lub
s:=format('%S %S',[v1,v2])
zależy od kryteriów "najlepszy". Jeśli wszystko co robisz to łączenie dwóch ciągów, używałbym operatora +. To oczywiste, co próbujesz zrobić i łatwo odczytać, a to trochę szybciej, ponieważ nie musi korzystać z wariantów. (Czy spojrzał na co format
faktycznie robi pod maską? To trochę przerażające!)
Główną zaletą format
jest to, że pozwala tworzyć jeden ciąg i przechowywać go gdzieś, na przykład w postaci pliku tekstowego lub resourcestring, i zbieraj inne parametry później. Dzięki temu jest przydatny w bardziej złożonych zadaniach. Ale jeśli wszystko, co musisz zrobić, to przykleić dwa struny do siebie, to trochę przesadzone IMO.
Oto trzecia opcja:
s:=Concat(V1,V2);
To jest identyczne z s: = V1 + V2; Concat to funkcja "magiczna" kompilatora, która jest zwinięta, aby wywołać tego samego wewnętrznego pomocnika, co
Podczas gdy jest to identyczne za kulisami, uważam, że jest to łatwiejsze do odczytania w kodzie niż operator "+", szczególnie w przypadku długich ciągów lub wielokrotnych konkatenacji. Wraca to do praktycznego punktu, w którym Mason jest "najlepszy". – Argalatyr
Format działa z internacjonalizacją, umożliwiając lokalizację aplikacji. Konkatenacja nie. Dlatego preferuję format dowolnego wyświetlacza, który może być produkowany w sposób zależny od kultury.
Aktualizacja: format powód działa dla internacjonalizacji jest to, że nie wszystkie języki wyrażają wszystko w tej samej kolejności. Zmyślony Przykładem może być:
resourcestring
sentence = ' is ';
var
subject = 'Craig';
adjective = 'helpful';
begin
WriteLn(subject + sentence + adjective + '!');
To działa, i mogę dostosować się resourcestring, ale w języku hiszpańskim chciałbym napisać, "¡Qué Servicial es Craig!" Łańcuch zasobów mi nie pomaga. Zamiast powinienem napisać:
resourcestring
sentence = '%S is %S!'; // ES: '¡Qué %1:S es %0:S!'
Możesz wyjaśnić to stwierdzenie, prawdopodobnie nie jest oczywiste dla wielu użytkowników Delphi, dlaczego Format działa z i18n. –
OK, jak to jest? –
Dobrze, na co liczyłem :-) –
używam:
s := v1 + ' ' + v2;
To najczystszy i najprostszy do zrozumienia.
To jest najważniejsze.
Możesz znaleźć konstrukcję, która jest marginalnie bardziej wydajna, np. za pomocą TStringBuilder w Delphi 2009. Jeśli wydajność jest sprawą najwyższej wagi, należy zrobić to, co konieczne w dwóch lub trzech najbardziej krytycznych liniach. Wszędzie indziej użyj kodu i konstrukcji, które są jasne i łatwe do zrozumienia.
Zwykle "najlepsze" w końcu sprowadza się do "Czy rozumiem, dlaczego napisałem kod w ten sposób 3 miesiące od teraz?". –