Pular para o conteúdo

25 · Máquinas de Estado

Ações de Transição

Blocos de código que executam automaticamente quando uma transição ocorre.

Nesta página

Cada transição pode carregar um bloco de ação escrito entre chaves logo após o nome do evento: A -> B on evento { ... }. O bloco executa de forma síncrona depois que a transição é decidida, mas antes de .send retornar — ideal para efeitos colaterais coesos com a mudança de estado (logs, pulsos de hardware, gatilhos de animação).

Porta com quatro transições, cada uma imprimindo uma mensagem ao disparar.

02-actions.zolo
Playground
// Feature: transition actions — code that runs on transition
// Syntax: `A -> B on event { <body> }`. The block runs after the
// transition is decided but before `.send` returns.
// When to use: side effects tied to state changes — log lines,
// hardware pulses, animation triggers, audio events.

machine Door {
  state Closed, Open, Locked
  initial Closed
  Closed -> Open on open { print("door opened") }
  Open -> Closed on close { print("door closed") }
  Closed -> Locked on lock { print("door locked") }
  Locked -> Closed on unlock { print("door unlocked") }
}

let door = Door.new()
print(door.state)  // expected: Closed

door.send("open")  // expected: door opened
print(door.state)  // expected: Open

door.send("close")  // expected: door closed
print(door.state)  // expected: Closed

door.send("lock")  // expected: door locked
print(door.state)  // expected: Locked

door.send("unlock")  // expected: door unlocked
print(door.state)  // expected: Closed

Mantenha os blocos pequenos. Para trabalho mais pesado, prefira lançar uma corrotina com spawn dentro da ação em vez de bloquear o send.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br