martes, 23 de junio de 2009

Formato de strings: función Format vs concatenación

Algo que hago con bastante frecuencia, es armar textos que se componen de una parte fija y otra que toma valores de variables o atributos. Por ejemplo, cuando se quiere mostrar un mensaje.

En GeneXus hay por lo menos dos opciones para generar estos textos:
  1. usando la concatenación de strings con el operador +
  2. usando la función Format, que creo que se agregó en GeneXus 9.0
  3. hay una tercer forma que descarto de entrada, que es con la función Concat...
Pero entonces, ¿cuál es la mejor opción?

Con respecto a la legibilidad del código, creo que ambas opciones son buenas, puede haber algún caso que una de las dos quede mejor que la otra.

La ventaja que tiene la función Format es cuando tenemos que traducir la aplicación usando el objeto Language, porque queda todo el texto en un solo item del objeto.

Por ejemplo, el texto "El pedido número NNN fue confirmado", usando la concatenacion de strings queda
&mensaje = 'El pedido número ' + PedidoId.ToString() + ' fue confirmado'
con lo que al traducirlo tenemos que traducir los dos textos por separado:  'El pedido número ' y ' fue confirmado'...

Si usamos la función Format, nos queda
&mensaje = Format('El pedido número %1 fue confirmado', PedidoId.ToString())
con lo cual tenemos un solo literal.

Puede haber algún caso donde tal vez no se pueda usar la función Format, por ejemplo en una regla error() en una transacción, pero en todos casos donde se pueda, creo que conviene usar la fución Format...

1 comentario:

  1. Totalmente de acuerdo.
    No usar la format en esos casos puede hacer "intraducible" la aplicación.
    El motivo es que una frase se arma de forma distinta en los distintos idiomas. No es el mismo orden para sujeto, predicado,etc en "latino" que en ingles o alemán o japones.

    ResponderEliminar