Saltar al contenido

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

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br