Olvídate de concat y comienza a usar concat
@ JavaScript @ Permalink
Puede sonar como una locura pero Array.prototype.concat()
de javascript creo que es la peor implementación que podemos encontrar en cualquier lenguaje moderno para concatenar variables o porciones de textos a otra cadena de texto.
Podemos concatenar de dos formas:
var mensaje = "Buenos días, ";
var nombre = "Junior";
console.log( mensaje.concat(nombre) );
// RESPUESTA: "Buenos días, Junior"
var mensaje = "Buenos días, ";
var nombre = "Junior";
console.log( mensaje + nombre );
// RESPUESTA: "Buenos días, Junior"
¿Verdad que lucen bien? ¿Verdad que el segundo luce más cómodo que el primero? Intenta usar cualquiera de los dos métodos con una cadena de texto larga a ver si piensas lo mismo.
Es muy raro ver programadores javascript usar concat()
, en lugar de este prefieren +
, mucho más simple de aplicar. Ambos pueden funcionar para cadenas cortas, pero si incrustamos varias líneas de HTML en nuestro código a modo de template, se vuelve un infierno.
¿Qué tal si extendemos concat()
y lo hacemos parecer a format
de Python para volverlo más usable? Veamos el script:
String.prototype.concat = function ()
{
var arg = arguments || [];
var str = String(this).split('%s') || [];
for ( var i = 0, c = str.length, f = []; i < c; i++ )
{
f.push( str[i] + (arg[i] ? arg[i] : '') );
};
return f.join('');
};
Veamos cómo usarlo:
var texto = "Es un %s. Cosas extrañas nos esperan en los %s. %s, no lo sé, pero nos llaman.";
var porcion1 = 'amanecer rojo';
var porcion2 = 'lindes del bosque';
var porcion3 = 'Buenas o malas';
console.log( texto.concat(porcion1, porcion2, porcion3) );
// RESPUESTA: "Es un amanecer rojo. Cosas extrañas nos esperan en los lindes del bosque. Buenas o malas, no lo sé, pero nos llaman."
El script pretende localizar todos los input con el símbolo %s
y los reemplaza por las variables en el mismo orden que fueron agregadas en los argumentos.
Ahora (con un poco de trampa) podemos decir que concat()
es la mejor alternativa para concatenar porciones de texto a cadenas extensas. Entonces dejamos a +
para cadenas cortas.
Reto a que alguien lo mejore. ;-)