Análogo JavaScript de printf e String.Format: como formatar strings como um profissional?
Você já escreveu um código assim em JavaScript?
let name = 'Alexey';let age = 28;console.log('Olá, meu nome é ' + name + ' e eu tenho ' + age + ' anos.');Se sim — você sabe exatamente como isso é irritante. Ficar abrindo e fechando aspas, colocando sinais de mais, se confundindo com espaços. E se precisar inserir 5-6 variáveis? Um pesadelo!
Em outras linguagens, esse problema foi resolvido há muito tempo. Em Python, existe f"Olá, {name}" e "%s %d" % (name, age). Em C, o lendário printf. Em C# e Java, String.Format. E no JavaScript?
Spoiler: a solução existe, e não é apenas uma. Neste artigo, vamos analisar todas as formas de formatação de strings em JavaScript — desde as clássicas até as modernas. Você descobrirá qual análogo de printf em JavaScript escolher para sua tarefa e esquecerá para sempre a concatenação.
Por que a pergunta "JavaScript equivalent to printf/String.Format" é tão popular?
No Stack Overflow, essa pergunta acumulou centenas de milhares de visualizações. E não é por acaso. Todo desenvolvedor que migra de outra linguagem para JavaScript procura primeiro uma ferramenta familiar de formatação de strings.
O problema é que no JavaScript puro não existe um análogo nativo de printf ou String.Format. Existe apenas a concatenação (junção de strings com +). Mas os desenvolvedores encontraram várias soluções elegantes, e vamos analisá-las.
Método 1: Template Strings (Template Literals) — o padrão moderno
A partir do ES6 (2015), o JavaScript ganhou as template strings. Esta é a melhor alternativa a printf e String.Format para uso diário. Funcionam em todos os navegadores modernos e no Node.js.
Sintaxe: usamos crases ` em vez das aspas comuns, e as variáveis são inseridas com ${}.
let name = 'Maria';let age = 25;let city = 'Moscou';
// Em vez de concatenaçãolet message = `Olá, meu nome é ${name}, tenho ${age} anos e sou de ${city}.`;console.log(message); // Saída: Olá, meu nome é Maria, tenho 25 anos e sou de Moscou.Mas não é só isso! Dentro de ${} podemos executar qualquer expressão JavaScript:
let a = 10;let b = 5;
console.log(`Soma: ${a + b}`); // Soma: 15console.log(`Maior? ${a > b ? 'sim' : 'não'}`); // Maior? simconsole.log(`Aleatório: ${Math.random()}`); // Aleatório: 0.4837...Por que esta é a melhor alternativa a printf em JavaScript?
- Legibilidade — o código parece texto comum com inserções
- Segurança — o escape é feito automaticamente
- Multilinha — é possível escrever texto em várias linhas
- Expressões — é possível inserir resultados de cálculos
Template strings multilinha
let html = `<div class="card"> <h2>${title}</h2> <p>${description}</p></div>`;
console.log(html);// Saída — HTML organizado com quebras de linha preservadasCompare com a concatenação — a diferença é colossal!
Método 2: Biblioteca sprintf-js — o printf clássico em JavaScript
Se você sente nostalgia do printf do C ou da formatação com % do Python, tem uma ótima opção — a biblioteca sprintf-js.
Instalação via npm:
npm install sprintf-jsUso:
const sprintf = require('sprintf-js').sprintf;const vsprintf = require('sprintf-js').vsprintf;
// Formatação simpleslet result = sprintf('Olá, %s! Você tem %d anos.', 'Ivan', 30);console.log(result); // Olá, Ivan! Você tem