@xcore24/fsm
TypeScript icon, indicating that this package has built-in type declarations

1.0.0 • Public • Published

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

Package Sidebar

Install

npm i @xcore24/fsm

Weekly Downloads

1

Version

1.0.0

License

ISC

Unpacked Size

10.6 kB

Total Files

18

Last publish

Collaborators

  • xcore24