Rust · Avançado · Inglês · Técnico
typestate
Padrão que codifica o estado de um objeto no próprio tipo, como Porta<Aberta> e Porta<Fechada>. Operações inválidas deixam de compilar, em vez de falhar em execução.
Onde usar
Usado em builders e em APIs de hardware. Costuma empregar PhantomData e métodos que consomem self e devolvem o tipo no novo estado.
Em código
use std::marker::PhantomData as P;
struct Aberta;
struct Fechada;
struct Porta<E>(P<E>);
impl Porta<Fechada> {
fn abre(self) -> Porta<Aberta> { Porta(P) }
}
// Porta<Aberta> não tem abre()Exemplos
The typestate pattern makes invalid calls impossible.
O padrão typestate torna impossíveis as chamadas inválidas.
A builder with typestate forces the required fields.
Um builder com typestate obriga os campos exigidos.
Cuidado
Aumenta o número de tipos; só compensa quando usar a API fora de ordem é um erro real e caro.
Sinônimos
estado no tipo