ExpertiDict

Rust · Avançado · Inglês · Técnico

typestate

/ˈtaɪpsteɪt/substantivo

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

Veja também

Todos os termos de Rust