Métodos & Funções Associadas
Métodos são funções com um receptor self em um bloco impl. Funções associadas não possuem self - construtores como new são o exemplo familiar.
Busque em todas as páginas da documentação
Métodos são funções com um receptor self em um bloco impl. Funções associadas não possuem self - construtores como new são o exemplo familiar.
struct Rectangle { width: u32, height: u32 }
impl Rectangle {
fn new(width: u32, height: u32) -> Self {
Self { width, height }
}
fn area(&self) -> u32 {
self.width * self.height
}
}
fn main() {
let r = Rectangle::new(10, 20);
println!("{}", r.area());
}Quando usar isso: Agrupar comportamento com dados, APIs de construtor (builder APIs) e encapsular invariantes na mutação de structs.
#[derive(Debug)]
struct Account {
balance: i64,
}
impl Account {
fn open(initial: i64) -> Self {
Self { balance: initial.max(0) }
}
fn deposit(&mut self, amount: i64) {
if amount > 0 { self.balance += amount; }
}
fn balance(&self) -> i64 {
self.balance
}
}
fn main() {
let mut a = Account::open(100);
a.deposit(50);
println!("{:?}", a.balance());
}O que isso demonstra:
open é uma função associada - chamada como Account::opendeposit muta através de &mut selfbalance lê através de &self| Receptor | Significado |
|---|---|
&self | Empréstimo imutável |
&mut self | Empréstimo mutável exclusivo |
self | Pega a posse (consumindo) |
&self com padrões #[rustfmt::skip] | Casos avançados raros |
implimpl Rectangle { /* métodos */ }
impl Rectangle { /* mais métodos - mescla conceitualmente */ }impl Genéricoimpl<T: std::fmt::Display> Pair<T> {
fn show(&self) { println!("{}", self.0); }
}Métodos inerentes são específicos do tipo. Implementações de traits (impl) fornecem interfaces compartilhadas (Display, etc.).
self vs &self - Método consumidor quando empréstimo é suficiente força movimentos (moves). Correção: Usar &self por padrão.self.x() vs self.x - namespaces diferentes, mas confuso. Correção: Renomear para clareza.Self - Self refere-se ao tipo sendo implementado no bloco impl atual. Correção: Usar Self em construtores que retornam o próprio tipo.async precisam de async fn em traits com cuidado - Traits async nativos foram estabilizados em versões recentes do Rust. Correção: Seguir a documentação da edição para async em traits.| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
Funções livres fn f(s: &S) | Comportamento não é central para o tipo | Método expressa a capacidade claramente |
| Implementação de Trait | Interface polimórfica | Apenas um tipo concreto |
Padrão de trait de extensão (extension trait pattern) | Adicionar métodos a tipos estrangeiros | Regra orphan bloqueia impl direto |
Struct de construtor (Builder struct) | Muitos campos opcionais no construtor | new simples é suficiente |
Semelhante, mas sem ponteiro this - parâmetro self explícito com semântica de posse.
Sim. impl Enum { ... } funciona como structs.
Alias de tipo para o tipo sendo implementado no bloco impl atual.
impl Foo { const BAR: u32 = 1; } - chamada como Foo::BAR.
Retornar &self ou &mut self de setters para fluidez do construtor (ou consumir self).
pub fn em struct privada é inútil fora do módulo. A struct deve ser pub para uso externo.
Trait fornece um padrão; método inerente é preferido quando ambos existem - regras de resolução de nome se aplicam.
Convenção: new, default, from_* para construtores.
Sim: fn convert<T>(&self) -> T where ...
Via traits como Add em ops - veja a página de Sobrecarga de Operador.
impl automáticosVersões da Stack: Esta página foi escrita para Rust 1.97.0 (edição 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, e Polars 0.46+.
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026