Noções Básicas de Padrões Rust
10 exemplos para você começar com Padrões Rust - 7 básicos e 3 intermediários.
Pré-requisitos
- Rust 1.97.0 (edição 2024)
- Conforto com propriedade,
Option/Resulte traits
Exemplos Básicos
1. Newtype para Segurança
struct UserId(u64);
struct OrderId(u64);
// não é possível passar OrderId onde UserId é esperadoRelacionado: O Padrão Newtype
2. Builder para Configuração Complexa
let client = Client::builder()
.timeout(Duration::from_secs(5))
.build()?;Relacionado: Padrão Builder
3. Guards RAII
struct LockGuard<'a>(&'a mut State);
impl Drop for LockGuard<'_> {
fn drop(&mut self) { /* liberar */ }
}Relacionado: RAII e Guards Drop
4. Conversões From/Into
impl From<u64> for UserId {
fn from(id: u64) -> Self { UserId(id) }
}
let id: UserId = 42.into();Relacionado: From/Into e TryFrom
5. Traits de Extensão
trait StrExt {
fn trimmed(&self) -> &str;
}
impl StrExt for str {
fn trimmed(&self) -> &str { self.trim() }
}Relacionado: Iterator e Traits de Extensão
6. Codificação de Tipos de Estado (Typestate)
struct Connection<State> { /* ... */ }
struct Open;
struct Closed;Relacionado: Padrão Typestate
7. Mutabilidade Interior
use std::cell::RefCell;
let cache = RefCell::new(HashMap::new());Relacionado: Padrões de Mutabilidade Interior
Exemplos Intermediários
8. Contexto de Erro com ?
fn load() -> Result<Data, Error> {
let raw = read_file().context("ler configuração")?;
parse(raw).context("analisar configuração")
}9. Cadeias de Iteradores
let active: Vec<_> = users.iter().filter(|u| u.active).map(|u| u.id).collect();10. Anti-Padrões a Evitar
unwrap()em código de bibliotecaclone()para satisfazer o borrow checkerRc<RefCell<_>>em todo lugar
Relacionado: Anti-Padrões Comuns
Versões da Pilha: 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+.