Interpolação de String no Rust | Rust
- Interpolação de String no Rust | Rust
Visão Geral
Rust não possui interpolação de string no formato ${variavel} como JavaScript ou C#.
A linguagem utiliza macros de formatação, que oferecem controle explícito e seguro sobre a construção de strings.
As principais macros envolvidas são:
format!→ cria umaStringprintln!→ imprime no stdouteprintln!→ imprime no stderrwrite!/writeln!→ escreve em buffers
Formatação Básica com {}
A forma mais comum de interpolação é através de {}:
let name = "Adolfo";
let age = 30;
let message = format!("Nome: {}, Idade: {}", name, age);
println!("{}", message);
Cada {} corresponde a um argumento na ordem declarada.
Argumentos Nomeados
Para melhorar legibilidade:
let name = "Adolfo";
let age = 30;
let message = format!("Nome: {name}, Idade: {age}");
Vantagens:
- Mais claro em strings grandes
- Evita erros de ordem
- Mais próximo de interpolação moderna
Debug Formatting
Para structs e tipos complexos, use {:?}.
#[derive(Debug)]
struct User {
name: String,
}
let user = User { name: "Ana".into() };
println!("{:?}", user); // Debug simples
println!("{:#?}", user); // Debug formatado
{:#?} melhora a leitura visual (pretty print).
Formatação Numérica
Casas decimais
let value = 10.4567;
println!("{:.2}", value); // 10.46
Padding
println!("{:05}", 42); // 00042
Alinhamento
println!("{:<10}", "Rust"); // alinhado à esquerda
println!("{:>10}", "Rust"); // alinhado à direita
println!("{:^10}", "Rust"); // centralizado
Diferença entre format! e println!
format!
- Retorna
String - Aloca memória
let s = format!("Produto {} criado", 10);
println!
- Não retorna
String - Apenas imprime
println!("Produto {} criado", 10);
Use format! apenas quando precisar armazenar o resultado.
Uso com JSON (Exemplo em Backend)
Exemplo comum em APIs com Actix:
use actix_web::HttpResponse;
let field = "name";
HttpResponse::BadRequest().json(serde_json::json!({
"message": format!("Campo {} é obrigatório", field)
}));
Aqui a interpolação é usada antes da serialização JSON.
Erro Comum
Isto não funciona:
let name = "Ana";
let s = "Olá {name}"; // ❌
Strings literais não realizam interpolação automática.
Sempre utilize macros de formatação.
Especificadores de Formatação
| Especificador | Descrição |
|---|---|
{} | Display padrão |
{:?} | Debug |
{:#?} | Debug formatado |
{:.2} | Precisão decimal |
{:05} | Padding com zeros |