State Machines: Kapan Mengalahkan Boolean Flag

Boolean flag menggandakan state diam-diam; state machine membuatnya eksplisit. Kapan pindah, dan jebakan transisi ambigu.

2026-09-10 · state-machine, modeling, flowforge

Dua boolean "loading" dan "error" sudah punya empat kombinasi, dan dua di antaranya tidak pernah kamu desain: loading sekaligus error, tidak loading dan tidak error. Setiap flag baru menggandakan kombinasi, dan kombinasi tak terdesain itu yang jadi bug.

State machine menukar kebebasan itu dengan kejelasan. Himpunan state ditulis eksplisit, dan transisi antar state divalidasi sebelum runtime. Kamu tidak bisa lagi "kebetulan" berada di state yang tidak ada.

Kapan pindah: begitu aturan perpindahan mulai punya syarat (hanya bisa cancel saat pending), atau begitu jumlah flag lebih dari dua. Di bawah itu, flag lebih murah.

Tiga hal yang sering salah: Satu, transisi ambigu. Dua transisi dari state yang sama dengan event yang sama tetapi guard berbeda — engine yang mengevaluasi guard berurutan aman, engine yang mengambil yang pertama cocok tidak deterministik. Ini persis debt yang tercatat di simulate.ts. Dua, guard bukan validasi. Guard memutuskan apakah transisi boleh jalan; validasi memutuskan apakah model itu sendiri masuk akal. Pisahkan keduanya. Tiga, state implisit. "Menunggu pembayaran" yang direpresentasikan sebagai status pending plus flag paid akan berubah jadi state terpisah begitu kombinasi membengkak.

Aturan praktis: kalau kamu bisa menggambar diagramnya dan setiap panah punya label event, itu kandidat state machine. Kalau panahnya tidak bisa dilabeli, kamu belum tahu aturannya.

← Semua Knowledge