Quelle est la meilleure approche, simple concaténation de chaînes ou string.format
?Chaîne de concaténation VS format de chaîne
Par exemple, ce qui est le mieux à utiliser:
s:=v1+' '+v2
ou
s:=format('%S %S',[v1,v2])
Quelle est la meilleure approche, simple concaténation de chaînes ou string.format
?Chaîne de concaténation VS format de chaîne
Par exemple, ce qui est le mieux à utiliser:
s:=v1+' '+v2
ou
s:=format('%S %S',[v1,v2])
en fonction de vos critères pour "mieux". Si tout ce que vous faites est de concaténer deux chaînes, j'irais avec l'opérateur +. C'est évident ce que vous essayez de faire et c'est facile à lire, et c'est un peu plus rapide car il n'a pas à utiliser de variantes. (Avez-vous regardé ce format
-t en fait sous le capot? C'est un peu effrayant!)
L'avantage majeur de format
est qu'il vous permet de faire une seule chaîne et de le stocker quelque part, comme dans un fichier texte ou un resourcestring et rassemblez d'autres paramètres ultérieurement. Cela le rend utile pour des tâches plus complexes. Mais si tout ce que vous avez à faire est de coller deux chaînes ensemble, c'est un peu trop IMO.
est ici une troisième option:
s:=Concat(V1,V2);
Identique à s: = V1 + V2; Concat est une fonction "magic" du compilateur qui est réduite pour appeler le même assistant interne que
Bien qu'il soit identique dans les coulisses, je trouve cela plus facile à lire dans le code que l'opérateur "+", en particulier avec des chaînes longues ou des concaténations multiples. Cela revient au point pratique de Mason sur ce qui est «meilleur». – Argalatyr
Le format fonctionne avec l'internationalisation, ce qui permet de localiser votre application. La concaténation ne fonctionne pas. Par conséquent, je privilégie le format pour tout affichage qui peut devoir être produit d'une manière dépendante de la culture.
Mise à jour: Le format de raison pour l'internationalisation est que toutes les langues n'expriment pas tout dans le même ordre. Un exemple artificiel serait:
resourcestring
sentence = ' is ';
var
subject = 'Craig';
adjective = 'helpful';
begin
WriteLn(subject + sentence + adjective + '!');
Cela fonctionne, et je peux personnaliser avec un resourcestring, mais en espagnol j'écrire, « ¡Qué es servicial Craig! » La resourcetring ne m'aide pas. Au lieu de cela, je devrais écrire:
resourcestring
sentence = '%S is %S!'; // ES: '¡Qué %1:S es %0:S!'
Vous pourriez vouloir expliquer cette déclaration, il n'est probablement pas évident pour beaucoup d'utilisateurs de Delphi pourquoi Format fonctionne avec i18n. –
OK, comment ça? –
Exactement ce que j'espérais :-) –
J'utilise:
s := v1 + ' ' + v2;
Il est plus clair et plus facile à comprendre.
C'est la chose la plus importante.
Vous pouvez trouver une construction légèrement plus efficace, par ex. en utilisant TStringBuilder dans Delphi 2009. Si l'efficacité est de la plus haute importance, alors faites ce qui est nécessaire dans les deux ou trois lignes les plus critiques. Partout ailleurs, utilisez du code et des constructions claires et faciles à comprendre.
Habituellement "meilleur" à la fin se résume à "Dois-je comprendre pourquoi j'ai écrit le code de cette façon dans 3 mois à partir de maintenant?". –