¿Cuál es el mejor enfoque, concatenación de cadenas simple o string.format
?Concatenación de cadenas Formato de cadena VS
Por ejemplo, ¿cuál es la mejor utilizar:
s:=v1+' '+v2
o
s:=format('%S %S',[v1,v2])
¿Cuál es el mejor enfoque, concatenación de cadenas simple o string.format
?Concatenación de cadenas Formato de cadena VS
Por ejemplo, ¿cuál es la mejor utilizar:
s:=v1+' '+v2
o
s:=format('%S %S',[v1,v2])
depende de su criterio para la "mejor". Si todo lo que estás haciendo es concatenar dos cadenas, iría con el operador +. Es obvio lo que intentas hacer y es fácil de leer, y es un poco más rápido porque no tiene que usar variantes. (¿Usted ha visto lo que format
hace realidad bajo el capó? Que es un poco de miedo!)
La principal ventaja de format
es que le permite hacer una sola cadena y lo almacena en algún lugar, como por ejemplo en un archivo de texto o una la cadena de recursos, y reúne otros parámetros más adelante. Esto lo hace útil para tareas más complejas. Pero si todo lo que necesitas hacer es unir dos hilos, es un poco exagerado IMO.
Aquí hay una tercera opción:
s:=Concat(V1,V2);
Eso es idéntico a s: = V1 + V2; Concat es una función "mágica" del compilador que se contrae para llamar al mismo auxiliar interno como
Si bien es idéntico entre bastidores, me parece más fácil de leer en código que el operador "+", especialmente con cadenas largas o concatenaciones múltiples. Esto se remonta al punto práctico de Mason de lo que es "lo mejor". – Argalatyr
El formato funciona con la internacionalización, lo que permite localizar su aplicación. La concatenación no. Por lo tanto, prefiero el formato para cualquier pantalla que pueda tener que producirse de una manera dependiente de la cultura.
Actualización: El formato de razón funciona para la internacionalización es que no todos los idiomas expresan todo en el mismo orden. Un ejemplo sería artificial:
resourcestring
sentence = ' is ';
var
subject = 'Craig';
adjective = 'helpful';
begin
WriteLn(subject + sentence + adjective + '!');
Esto funciona, y puede personalizar con un resourcestring, pero en español me escribiría, "¡Qué Servicial es Craig!" La cadena de recursos no me ayuda. En su lugar debería escribir:
resourcestring
sentence = '%S is %S!'; // ES: '¡Qué %1:S es %0:S!'
Es posible que desee explicar esa afirmación, probablemente no sea obvio para muchos usuarios de Delphi por qué el formato funciona con i18n. –
OK, ¿cómo es esto? –
Justo lo que esperaba :-) –
que utilizo:
s := v1 + ' ' + v2;
Es más claro y más fácil de entender.
Eso es lo más importante.
Puede encontrar una construcción que sea marginalmente más eficiente, p. utilizando TStringBuilder en Delphi 2009. Si la eficiencia es de suma importancia, haga lo necesario en las dos o tres líneas más críticas. En cualquier otro lugar, use código y construcciones que sean claras y fáciles de entender.
Por lo general, "mejor" al final se reduce a "¿Entiendo por qué escribí el código de esta manera 3 meses a partir de ahora?". –