Pular para o conteúdo

Ações de Transição

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.

Buscar no Zolo

9 resultados

enespt-br