Análogo de printf y String.Format en JavaScript: cómo formatear cadenas como un profesional
¿Alguna vez has escrito código como este en JavaScript?
let name = 'Aleksei';let age = 28;console.log('Hola, me llamo ' + name + ' y tengo ' + age + ' años.');Si es así, sabes exactamente lo molesto que es. Abrir y cerrar comillas constantemente, poner signos más, confundirse con los espacios. ¿Y si necesitas insertar 5 o 6 variables? ¡Un desastre!
En otros lenguajes este problema se resolvió hace tiempo. En Python existe f"Hola, {name}" y "%s %d" % (name, age). En C, el legendario printf. En C# y Java, String.Format. ¿Y en JavaScript?
Spoiler: hay solución, y más de una. En este artículo analizaremos todas las formas de formatear cadenas en JavaScript, desde las clásicas hasta las modernas. Descubrirás qué análogo de printf en JavaScript elegir para tu tarea y olvidarás para siempre la concatenación.
¿Por qué la pregunta "JavaScript equivalent to printf/String.Format" es tan popular?
En Stack Overflow, esta pregunta ha acumulado cientos de miles de visitas. Y no es casualidad. Cada desarrollador que migra de otro lenguaje a JavaScript busca primero la herramienta familiar para formatear cadenas.
El problema es que en JavaScript puro no hay un análogo integrado de printf o String.Format. Solo existe la concatenación (unir cadenas con +). Pero los desarrolladores han encontrado varias soluciones elegantes, y las analizaremos.
Método 1: Plantillas de cadenas (Template Literals) — el estándar moderno
A partir de ES6 (2015), JavaScript incorporó las plantillas de cadenas. Son el mejor análogo de printf y String.Format para el uso diario. Funcionan en todos los navegadores modernos y en Node.js.
Sintaxis: usamos comillas invertidas ` en lugar de las normales, e insertamos variables con ${}.
let name = 'María';let age = 25;let city = 'Madrid';
// En lugar de concatenaciónlet message = `Hola, me llamo ${name}, tengo ${age} años y soy de ${city}.`;console.log(message); // Salida: Hola, me llamo María, tengo 25 años y soy de Madrid.¡Pero esto no es todo! Dentro de ${} se pueden ejecutar cualquier expresión de JavaScript:
let a = 10;let b = 5;
console.log(`Suma: ${a + b}`); // Suma: 15console.log(`¿Mayor? ${a > b ? 'sí' : 'no'}`); // ¿Mayor? síconsole.log(`Aleatorio: ${Math.random()}`); // Aleatorio: 0.4837...¿Por qué es el mejor análogo de printf en JavaScript?
- Legibilidad — el código se ve como texto normal con inserciones
- Seguridad — el escape se realiza automáticamente
- Multilínea — se puede escribir texto en varias líneas
- Expresiones — se pueden insertar resultados de cálculos
Plantillas de cadenas multilínea
let html = `<div class="card"> <h2>${title}</h2> <p>${description}</p></div>`;
console.log(html);// Salida — HTML ordenado con saltos de línea conservados¡Compáralo con la concatenación: la diferencia es enorme!
Método 2: Librería sprintf-js — el printf clásico en JavaScript
Si sientes nostalgia por printf de C o el formateo con % de Python, tienes una excelente opción: la librería sprintf-js.
Instalación con npm:
npm install sprintf-jsUso:
const sprintf = require('sprintf-js').sprintf;const vsprintf = require('sprintf-js').vsprintf;
// Formateo simplelet result = sprintf('¡Hola, %s! Tienes %d años.', 'Juan', 30);console.log(result); // ¡Hola, Juan! Tienes