25 · Máquinas de Estado
Acciones de Transición
Bloques de código que se ejecutan automáticamente cuando ocurre una transición.
En esta página
Cada transición puede llevar un bloque de acción escrito entre llaves justo
después del nombre del evento: A -> B on evento { ... }. El bloque se ejecuta
de forma síncrona después de que la transición es decidida, pero antes de que
.send retorne — ideal para efectos secundarios cohesivos con el cambio de estado
(logs, pulsos de hardware, disparadores de animación).
Puerta con cuatro transiciones, cada una imprimiendo un mensaje al dispararse.
02-actions.zolo
// 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
Mantén los bloques pequeños. Para trabajo más intenso, prefiere lanzar una
corrutina con spawn dentro de la acción en lugar de bloquear send.
Consulta también