Saltar al contenido

Acciones de 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
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

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

Buscar en Zolo

9 resultados

enespt-br