0Pricing
Lua Academy · Aula

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)) -- 0000dead

Vá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  A

Construindo 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))    -- ERROR

Verificação rápida

O que string.format("%05.2f", 3.1) produz?

Recapitulação: string.format

Resumo:

  • %s cadeia de caracteres, %d inteiro, %f ponto flutuante, %x hexadecimal
  • Largura: %10d alinha à direita, %-10d à esquerda, %010d preenche com zeros
  • Precisão: %.2f (2 casas decimais), %.3s (3 caracteres)
  • %q coloca 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

  1. Noções básicas de cadeias: concatenação e comprimento
  2. Localização e extração de substrings
  3. string.format para saída
  4. string.gsub e string.gmatch
← Voltar para Lua Academy