Pular para o conteúdo

25 · Máquinas de Estado

Eventos tipados e dados de estado

Uma máquina tipada possui seus enums State e Event. Padrões de transição vinculam dados do evento e estado apenas nessa transição. Dados iniciais executam uma vez por instância. send retorna false quando nenhuma transição se aplica; can_send verifica padrões sem executar guards ou ações.

Nesta página

Uma máquina tipada possui seus enums State e Event. Padrões de transição vinculam dados do evento e estado apenas nessa transição. Dados iniciais executam uma vez por instância. send retorna false quando nenhuma transição se aplica; can_send verifica padrões sem executar guards ou ações.

Exemplo completo

Eventos tipados e dados de estado.

06-typed-events.zolo
Playground
// Typed catalogs make states and events ordinary nominal enum values.

machine Loader {
    state Idle, Ready(value: int)
    event Loaded(value: int), Reset
    initial Idle

    Idle -> Ready(value) on Loaded(value) if value > 0
    Ready(previous) -> Idle on Reset
}

let loader = Loader.new()
print(loader.can_send(Loader::Event::Loaded(-1))) // true: structural applicability only

print(loader.send(Loader::Event::Loaded(-1)))     // false: the guard is checked by send

print(loader.send(Loader::Event::Loaded(7)))      // true

if let Loader::State::Ready(value) = loader.state { print(value) } // 7

print(loader.send(Loader::Event::Loaded(8)))      // false: no transition from Ready

print(loader.send(Loader::Event::Reset))         // true

print(match loader.state { Loader::State::Idle => true, Loader::State::Ready(_) => false })       // true

Regras e comportamento

Estados e eventos tipados · Documentação

A partir de um checkout do repositório:

zolo examples/features/26-state-machines/06-typed-events.zolo

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br