首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有限状态机是什么?它用于什么?

有限状态机是什么?它用于什么?
EN

Stack Overflow用户
提问于 2013-02-11 14:42:29
回答 3查看 6.9K关注 0票数 19

最近,我开始对JavaScript中的有限状态机进行一些研究,甚至对发现了一个图书馆中的有限状态机进行研究,这使得它们更易于实现。虽然我已经掌握了状态机用于跟踪和更改对象的“状态”(例如,“准备”、“完成”、“不活动”等)的概念,但我认为我并不完全理解它们的实际含义。有人能帮忙澄清以下几点吗?

  • 究竟什么是有限状态机,或者它只是一个状态机?我听说过这两种说法
  • 有限状态机(在JavaScript中)有什么实际用途?
  • 我什么时候不想使用有限状态机?
  • 哪些书籍、文章、教程等能更深入地研究有限状态机(在JavaScript中)?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-11 14:54:59

有限状态机是一个抽象的概念。因此,状态机的概念与任何特定语言都是正交的。如果你是看看维基百科,它说“是一种计算的数学模型,用于设计计算机程序和时序逻辑电路”。

这意味着FSM通常被用作数学概念,被计算机科学家用来解决这门学科的问题,比如“能计算出xyz吗?”

基于您的问题和链接,我认为您的意思是询问状态图(或Statechart),这是不同的。创建状态图时,您将程序划分为一系列状态,以及在这些状态中可能发生的事件。例如,您的程序可能处于"EditingForm“状态,接收事件"doSave",然后进入”保存“状态,接收事件‘保存完成’,然后返回”查看“状态。

这种抽象非常有用,因为它允许程序员在概念上组织当正确实现时应该发生的事情,从而产生更干净和更有组织的代码。这反过来又会导致更少的bug。状态图(取决于实现)仅通过处理为状态定义的事件来防止意外效果--例如,“查看”可能没有定义' Save‘事件,因此,如果程序处于“查看”状态,任何保存都是没有意义的,因为只有在“编辑”状态下才会发生这种情况。

如果您查看链接到的框架的概述,您将注意到有一组处理程序可以用来挂钩进入状态、留下状态、正在发生的操作等。这允许您实际执行与状态/操作相对应的事情。例如,在进入“编辑”状态时,您可以将表单呈现给用户并启用保存按钮。在进入“保存”状态时,您可以禁用该按钮,并启动要保存的请求。在接收到"SaveComplete“事件时,您可能会切换到”查看“状态,删除表单,并显示其他内容。

票数 12
EN

Stack Overflow用户

发布于 2013-02-11 15:05:18

什么是有限状态机?

这是一种声明状态和在它们之间过渡的副作用的方法。

有限状态机的一些实际用途是什么?

而不是这样的代码:

代码语言:javascript
复制
function decide()
{
  if(mouseButtonIsDown && mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {
    clearBuffers();
    startPlaying();
    cursorBecomeHand();
  }
  else if(!mouseButtonIsDown && !mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {
    

  }
  // more ifs
}

您只保留几个状态,并将事件分解为函数,定义在哪种状态下发生的情况。

代码语言:javascript
复制
function drag_started() {
 switch(your_state) {
   case "within_box":
    clearBuffers();
    cursorBecomeHand();
    your_state= "playing";
    startPlaying();
    break;
 }

}

这就导致了状态和事件的分离,这意味着更少的回归和更多的可维护性。

我什么时候不想使用有限状态机?

在这一点上回答自己。如果您只有一个状态,那么就不用为状态机操心了。

哪些书籍、文章、教程等能更深入地研究有限状态机(在JavaScript中)?

针对学术界,我建议阅读jquery插件的源代码。例如,查看_mouseMove和_mouseUp中的jquery源

票数 13
EN

Stack Overflow用户

发布于 2013-02-11 14:57:12

它经常用于语言解析器的扫描器和词法。根据特定的语法规则创建并分析源代码中的每个令牌。

基本上,这里您检查当前状态,看看下一个字符或标记是否有意义,以及它们应该如何组织。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14814367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档