string.format para saída
Formate cadeias com %s, %d, %f e outros especificadores de formato.
string.format para saída é uma aula grátis de Lua Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Lua Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Lua Academy inclui 4 aulas no total.
Fundamentos de string.format
string.format(fmt, ...) formata valores usando especificadores de formato no estilo C. Retorna uma cadeia de caracteres formatada. A cadeia de formato contém texto literal e especificadores de conversão que começam com %. Essa é a principal maneira de produzir uma saída precisa em Lua.
print(string.format("Hello, %s!", "Lua")) -- Hello, Lua!
print(string.format("Pi is %.4f", math.pi)) -- Pi is 3.1416
print(string.format("%d items at $%.2f each", 5, 2.99))%d e %i para inteiros
%d e %i formatam inteiros. Adicione uma largura para preencher: %5d alinha à direita em 5 caracteres. %-5d alinha à esquerda. %05d preenche com zeros. Esses especificadores truncam números de ponto flutuante — use math.floor() antes, se necessário.
print(string.format("%d", 42)) -- 42
print(string.format("%5d", 42)) -- 42 (right-aligned)
print(string.format("%-5d|", 42)) -- 42 | (left-aligned)
print(string.format("%05d", 42)) -- 00042
print(string.format("%+d", 42)) -- +42%f e %e para números de ponto flutuante
%f formata na notação de ponto fixo; %e, na notação científica; %g escolhe a opção mais curta. Um especificador de precisão (por exemplo, %.2f) controla as casas decimais. A precisão padrão é 6.
print(string.format("%.2f", 3.14159)) -- 3.14
print(string.format("%10.3f", 3.14)) -- 3.140
print(string.format("%e", 12345.678)) -- 1.234568e+04
print(string.format("%.2e", 0.001)) -- 1.00e-03
print(string.format("%g", 100.0)) -- 100%s para cadeias de caracteres
%s insere uma cadeia de caracteres. Valores que não são cadeias são convertidos com tostring. Largura e alinhamento funcionam como nos números. %q coloca uma cadeia entre aspas em um formato legível por Lua (com sequências de escape), o que é útil para serialização.
print(string.format("%-10s|", "hi")) -- hi |
print(string.format("%10s|", "hi")) -- hi|
print(string.format("%.3s", "hello")) -- hel (truncate)
print(string.format("%q", 'say "hi"'))-- "say \"hi\""
print(string.format("%s=%s", "key","val")) -- key=val%x e %o para outras bases
%x formata um inteiro em hexadecimal (minúsculo); %X, em hexadecimal maiúsculo; %o, em octal; %u, como inteiro sem sinal. Eles são úteis para exibir máscaras de bits, códigos de cores e em programação de baixo nível.
print(string.format("%x", 255)) -- ff
print(string.format("%X", 255)) -- FF
print(string.format("%#x", 255)) -- 0xff (with prefix)
print(string.format("%o", 8)) -- 10 (octal)
print(string.format("%08x", 0xDEAD)) -- 0000deadVários valores
Passe tantos argumentos quantos forem os especificadores de formato. A quantidade de argumentos deve corresponder — poucos argumentos causam um erro; os extras são ignorados. Use cadeias de formato para construir saídas estruturadas, como tabelas, registros ou relatórios.
local function printRow(name, score, grade)
print(string.format("%-12s %3d %s", name, score, grade))
end
printRow("Alice", 95, "A")
printRow("Bob", 87, "B")
printRow("Carol", 91, "A")
-- Alice 95 A
-- Bob 87 B
-- Carol 91 AConstruindo modelos de formato
Armazene cadeias de formato como constantes para reutilizá-las. Isso mantém a saída consistente e facilita alterar o formato em um único lugar. A formatação de cadeias é a base do registro, da saída em CSV e da geração de relatórios.
local LOG_FMT = "[%s] %s: %s"
local function log(level, module, msg)
print(string.format(LOG_FMT, level, module, msg))
end
log("INFO", "server", "started on port 8080")
log("WARN", "db", "connection pool low")
log("ERROR", "auth", "token expired")Preenchimento e alinhamento
Use especificadores de largura para alinhar a saída. Uma largura positiva alinha à direita; uma negativa, à esquerda. Isso é especialmente útil para tabelas e relatórios nos quais as colunas devem ficar alinhadas. Combine com string.rep para criar linhas divisórias.
local fmt = "%-15s %6s %8s"
print(string.format(fmt, "Name", "Score", "Grade"))
print(string.rep("-", 31))
local data = {{"Alice",95,"A"},{"Bob",87,"B"},{"Dave",78,"C"}}
for _, r in ipairs(data) do
print(string.format(fmt, r[1], r[2], r[3]))
end%c e %% literais
%c converte um inteiro no caractere ASCII correspondente. %% produz um sinal de porcentagem literal. Eles são úteis para gerar caracteres especiais ou incluir % em cadeias de formato.
print(string.format("%c%c%c", 76, 117, 97)) -- Lua
print(string.format("100%%")) -- 100%
print(string.format("%.1f%%", 87.5)) -- 87.5%
-- Build a progress bar
local pct = 65
local filled = math.floor(pct / 5)
local bar = "[" .. string.rep("#",filled) .. string.rep(".",20-filled) .. "]"
print(bar .. " " .. pct .. "%")string.format versus tostring
Use tostring para uma conversão simples de qualquer tipo; use string.format para controlar a precisão, preencher e formatar vários valores. string.format("%s", val) chama tostring internamente nas conversões para cadeia de caracteres.
-- tostring: simple, any type
print(tostring(3.14)) -- 3.14
print(tostring(true)) -- true
print(tostring(nil)) -- nil
-- string.format: precision + structure
print(string.format("%.2f", 3.14159)) -- 3.14
print(string.format("%d", 255)) -- 255
-- print(string.format("%d", true)) -- ERRORVerificação rápida
O que string.format("%05.2f", 3.1) produz?
Recapitulação: string.format
Resumo:
%scadeia de caracteres,%dinteiro,%fponto flutuante,%xhexadecimal- Largura:
%10dalinha à direita,%-10dà esquerda,%010dpreenche com zeros - Precisão:
%.2f(2 casas decimais),%.3s(3 caracteres) %qcoloca uma cadeia entre aspas para análise por Lua%%sinal de porcentagem literal
Perguntas Frequentes
A aula “string.format para saída” é grátis?
Sim — o texto completo de “string.format para saída” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Lua Academy, atualize para CoddyKit PRO. O curso de Lua Academy inclui 4 aulas no total.
O que vou aprender em “string.format para saída”?
Formate cadeias com %s, %d, %f e outros especificadores de formato. Você pratica Lua Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Lua Academy?
Nenhuma experiência prévia é necessária. Lua Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “string.format para saída”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Lua Academy?
Sim. Cada aula de Lua Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Noções básicas de cadeias: concatenação e comprimento
- Localização e extração de substrings
- string.format para saída
- string.gsub e string.gmatch