@xcore24/fsm
v1.0.0
Published
TypeScript library implementing the finite-state machine
Downloads
1
Maintainers
Readme
fsm
fsm
библиотека на TypeScript реализующая конечный автомат.
Немного теории
Конечный автомат (finite-state machine
) — это математическая абстракция, модель, которая может находиться только в одном из конечного числа состояний в каждый конкретный момент времени. Автомат умеет переходить из одного состояния в другое в ответ на данные, которые подаются на вход; изменение состояния называется переходом. FSM определяется списком его состояний, начальным состоянием и инпутами, запускающими переходы.
Примеры использования
FSM
можно использовать для описания алгоритмов, позволяющих решать те или иные задачи, а также для моделирования практически любого процесса. Несколько примеров:
- Логика искусственного интеллекта
- Синтаксический и лексический анализ
- Сложные компоненты
- Поведение UI-компонентов
Installation
Для старта установите пакет:
npm install @xcore24/fsm
Basic Usage
import { FSM } from '@xcore24/fsm'
// Рассмотрим конечный автомат на примере умного дома
// Опишем поведение:
// Когда мы входим в квартиру у нас должен загореться свет в холле
// Когда мы уходим из квартриы - свет в холле должен погаснуть
// Определим 2 состояния и поведения (переходы) для этих состояний:
// Свет включен
// Свет выключен
// Инициализируем таблицу состояний и переходов между ними
const transitions = {
lightOn: {
leave: 'lightOff'
},
lightOff: {
come: 'lightOn'
}
}
// Начальное состояние устанавливаем в "Свет выключен"
const machine = new FSM('lightOff', transitions)
// Убеждаемся в том что свет выключен
console.log([`Состояние лампочки в комнате: "${machine.state}"`], '\n')
// Научим наш "Умный дом" реагировать на то, что кто-то пришел или выешл
machine.subscribe((state) => {
if (state === 'lightOn') {
// Можно отправить например смс или пуш уведомление что дверь была открыта
console.log([`Тебя приветствует "Умный дом"!`], '\n')
}
if (state === 'lightOff') {
// Так-так-так. Кто-то вышел из дома, а если мы не разрешали выходить..
// Можно отправить уведомление, что из квартиры вышли.
// Например ребенок (Сергей) вышел погулять, но он же провинился - получил тройбан по физике.
// Нельзя ему выходить гулять на улицу с друзьями. Пусть учит уроки сидит!
console.log([`Сергей, ты куда? Быстро учить физику!`], '\n')
}
})
// Заходим и свет должен включиться
console.log(['Кто-то заходит в квартиру...'])
machine.send('come')
// Выходим и свет должен выключиться
console.log(['Сергей выходит погулять...'])
machine.send('leave')