domingo, 21 de agosto de 2011

Concatenacion de dos cadenas (concat)

La concatenacion de cadenas, es una operacion ampliamente utilizada en los lenguajes de programacion. Pero en el caso de algunos lenguajes compilados, existen metodos poco utilizados, pero muy utiles. Un ejemplo es el metodo java.lant.String.concat o System.String.Concat que tienen algunos lenguajes de programación como java o C#. Veamos por que.


Cuando es necesario concatenar exactamente 2 cadenas y utilizar inmediatamente el resultado de esto (por ejemplo, agregar una extension a un nombre de archivo, para crearlo) es recomendable utilizar este metodo y no algun otro alternativo, como el uso de operadores o de clases auxiliares, como lo es java.lang.StringBuilder o System.StringBuilder.

¿Que ocurre, cuando se emplea StringBuilder?
  1. Creacion del objeto StringBuilder, inicializado, con la primer cadena (Creacion del primer objeto)
  2. Agregar los elementos caracteres de la segunda cadena (posiblemente expandiendo el buffer del builder, posiblemente creando el segundo objeto implicito, un arreglo de caracteres).
  3. Crear un nuevo objeto cadena (Creacion del segundo o tercer objeto)
¿Que ocurre cuando se emplea el metodo concat?
  1. Cracion de un nuevo objeto cadena, con la longitud exacta de la suma de ambos elementos (Creacion del primer y unico nuevo objeto)
  2. Copiar los elementos de la primer cadena
  3. Copiar los elementos de la segunda cadena
Cuando se trata de concatenar exactamente dos cadenas, el metodo concat es optimo, en terminos de uso de memoria, por que solo utiliza la cantidad exacta de memoria, mientras que la clase StringBuilder, al ser generica (para concatenar cualquier cantidad de cadenas) aloja bloques de memoria de tamaños distintos, tratando de evitar alojar memoria posteriormente (normalmente, son bloques cada vez mas grandes) y al finalmente, crea un objeto String, con el resultado de la concatenacion.

Nota: Dependiendo del lenguaje de programacion, asi como la version del mismo, el metodo de concatenacion, puede o no tener alguna de las siguientes optimizaciones.

  •  Si el metodo recibe dos parametros exactamente y es miembro estatico
    • Si ambos parametros son nulos, se regresa la cadena vacia.
    • Cuando alguno de los dos parametros es nulo, se regresa el otro parametro.
    • Cuando alguno de los dos parametros es la cadena vacia, se regresa el otro parametro. 
  • Cuando el metodo no es estatico y se invoca utilizando un objeto de la clase String
    • Si el parametro que se recibe es nulo, se regresa la cadena referenciada por this.
    • Si el parametro que se recibe es la cadena vacia, se regresa la cadena referenciada por this.