Saltar al contenido

25 · Máquinas de Estado

Declaración y Transiciones

Cómo declarar estados, definir el estado inicial y disparar eventos con `.send`.

En esta página

Un bloque machine lista los estados con state, indica el estado inicial con initial y declara cada transición como A -> B on evento. Con eso el compilador genera automáticamente el constructor y los métodos de control — cero boilerplate.

.send("evento") intenta avanzar la máquina: devuelve true si la transición existía desde el estado actual, o false si el evento no aplica. El estado nunca queda inconsistente.

Semáforo con tres estados; send devuelve true/false según el evento.

01-traffic-light.zolo
Playground
// Feature: state machines — `machine` keyword, declarative transitions
// Syntax:
//   machine Name {
//       state A, B, C
//       initial A
//       A -> B on event
//   }
// `Name.new()` constructs an instance; `.state` returns the current
// state; `.send(event)` advances and returns true/false depending on
// whether the event was applicable.
// When to use: protocols, UI flows, parsers, devices with a small
// set of well-defined states. Cleaner than ad-hoc enums + match.

machine TrafficLight {
  state Red, Yellow, Green
  initial Red
  Red -> Green on go
  Green -> Yellow on caution
  Yellow -> Red on stop
}

let light = TrafficLight.new()
print(light.state)

// expected: Red

let ok = light.send("go")
print(ok)  // expected: true
print(light.state)  // expected: Green

light.send("caution")
print(light.state)  // expected: Yellow

light.send("stop")
print(light.state)  // expected: Red

// An unknown event returns false and the state stays put.
let bad = light.send("unknown")
print(bad)  // expected: false
print(light.state)  // expected: Red

Desafío

Agrega un cuarto estado Blink y una transición Red -> Blink on blink. Dispara light.send("blink") desde Red y confirma que .state cambia. Luego intenta disparar "blink" desde Green y observa el retorno false.

Consulta también

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br