1.0.0 • Published 2 years ago

@xcore24/fsm v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
2 years ago

fsm

fsm библиотека на TypeScript реализующая конечный автомат.

Немного теории

Конечный автомат (finite-state machine) — это математическая абстракция, модель, которая может находиться только в одном из конечного числа состояний в каждый конкретный момент времени. Автомат умеет переходить из одного состояния в другое в ответ на данные, которые подаются на вход; изменение состояния называется переходом. FSM определяется списком его состояний, начальным состоянием и инпутами, запускающими переходы.

Примеры использования

FSM можно использовать для описания алгоритмов, позволяющих решать те или иные задачи, а также для моделирования практически любого процесса. Несколько примеров: 1. Логика искусственного интеллекта 2. Синтаксический и лексический анализ 3. Сложные компоненты 4. Поведение 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')