国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何用狀態(tài)機(jī)簡(jiǎn)化代碼中復(fù)雜的 If Else 邏輯

開(kāi)發(fā) 前端
不知道你有沒(méi)有遇到代碼邏輯特別復(fù)雜的情況,需要很多的 if else 來(lái)判斷,每種情況有自己的邏輯。這樣的 if else 特別多以后,閱讀代碼和繼續(xù)迭代都變得很困難。如果你遇到這種代碼,會(huì)怎么優(yōu)化呢?

[[403807]]

本文轉(zhuǎn)載自微信公眾號(hào)「神光的編程秘籍」,作者神說(shuō)要有光zxg。轉(zhuǎn)載本文請(qǐng)聯(lián)系神光的編程秘籍公眾號(hào)。

不知道你有沒(méi)有遇到代碼邏輯特別復(fù)雜的情況,需要很多的 if else 來(lái)判斷,每種情況有自己的邏輯。這樣的 if else 特別多以后,閱讀代碼和繼續(xù)迭代都變得很困難。如果你遇到這種代碼,會(huì)怎么優(yōu)化呢?

本文就提供一種思路,通過(guò)狀態(tài)機(jī)來(lái)簡(jiǎn)化復(fù)雜的 if else 代碼邏輯。

讀完本文,你會(huì)了解到:

  • 什么是狀態(tài)機(jī)
  • 什么是狀態(tài)自動(dòng)機(jī)
  • typescript 源碼是怎么利用狀態(tài)機(jī)使流程更清晰的
  • 詞法分析中的狀態(tài)機(jī)
  • 業(yè)務(wù)代碼中如何使用狀態(tài)機(jī)

什么是狀態(tài)機(jī)

當(dāng)處理的情況特別多,我們把每種情況的處理邏輯封裝成一個(gè)狀態(tài),然后不同情況之間的轉(zhuǎn)換變成狀態(tài)的轉(zhuǎn)換。這種代碼組織形式就是狀態(tài)機(jī)。

當(dāng)每個(gè)狀態(tài)知道輸入某一段內(nèi)容時(shí)轉(zhuǎn)到哪一個(gè)狀態(tài),在一個(gè)循環(huán)內(nèi)自動(dòng)進(jìn)行狀態(tài)的流轉(zhuǎn)和不同狀態(tài)的處理,這種叫做狀態(tài)自動(dòng)機(jī)(automation),如果一個(gè)狀態(tài)在一種輸入下只有一個(gè)后續(xù)狀態(tài),這種就叫做確定性有限狀態(tài)自動(dòng)機(jī)(DFA)。

狀態(tài)之間的流轉(zhuǎn)可以通過(guò)狀態(tài)轉(zhuǎn)換圖來(lái)表示。

typescript 源碼中的狀態(tài)機(jī)

typescript compiler 就是通過(guò)狀態(tài)機(jī)來(lái)組織整個(gè)編譯流程的:

首先 tsc 劃分了很多狀態(tài),每種狀態(tài)處理一種邏輯。比如:

  • CreateProgram 把源碼 parse 成 ast
  • SyntaxDiagnostics 處理語(yǔ)法錯(cuò)誤
  • SemanticDiagnostics 處理語(yǔ)義錯(cuò)誤
  • Emit 生成目標(biāo)代碼

typescript 就通過(guò)這種狀態(tài)的修改來(lái)完成不同處理邏輯的流轉(zhuǎn),如果處理到結(jié)束狀態(tài)就代表流程結(jié)束。

這樣使得整體流程可以很輕易的擴(kuò)展和修改,比如想擴(kuò)展一個(gè)階段,只要增加一個(gè)狀態(tài),想修改某種狀態(tài)的處理邏輯,只需要修改下?tīng)顟B(tài)機(jī)的該狀態(tài)的轉(zhuǎn)向。而不是大量的 if else 混雜在一起,難以擴(kuò)展和修改。

可以看到,狀態(tài)機(jī)使得 typescript 的編譯步驟可以靈活的擴(kuò)展和修改。

詞法分析中的狀態(tài)機(jī)

其實(shí)狀態(tài)機(jī)最常用的地方是用于詞法分析,因?yàn)槊總€(gè) token 都是一種處理情況,自然會(huì)有很多 if else。

像下面這樣用 if else 來(lái)做分詞自然也可以,這是 wenyan 的詞法分析邏輯,但是代碼很難維護(hù)。

更好的做法是使用狀態(tài)機(jī)(DFA)來(lái)做分詞,把每一種 token 的處理封裝成一個(gè)狀態(tài)。通過(guò)邊界條件的判斷來(lái)做狀態(tài)流轉(zhuǎn),比如某個(gè) wxml parser 分了這些狀態(tài):

每種狀態(tài)處理一種情況的 token 的識(shí)別:

通過(guò)狀態(tài)的變化驅(qū)動(dòng)處理邏輯的流轉(zhuǎn):

這樣不斷的進(jìn)行各狀態(tài)之間的流轉(zhuǎn),當(dāng)處理到字符串的末尾的時(shí)候,就完成了所有的分詞。

業(yè)務(wù)代碼中的狀態(tài)機(jī)

業(yè)務(wù)代碼中當(dāng)遇到各種 if else 的判斷的時(shí)候同樣可以用狀態(tài)機(jī)來(lái)優(yōu)化。把每種情況封裝成一個(gè)狀態(tài),通過(guò)某一種條件觸發(fā)狀態(tài)的流轉(zhuǎn),然后在狀態(tài)機(jī)里面選擇不同的狀態(tài)處理邏輯進(jìn)行處理。

不管是游戲中不同狀態(tài)做不同的處理邏輯,還是在 ui 項(xiàng)目中不同狀態(tài)做不同的渲染,當(dāng)代碼邏輯復(fù)雜時(shí),難免會(huì)有很多 if else,這時(shí)候都可以用狀態(tài)機(jī)的思路來(lái)做優(yōu)化。

這樣,當(dāng)后續(xù)擴(kuò)展處理邏輯、修改不同條件下的處理邏輯都變得簡(jiǎn)單和清晰很多。

總結(jié)

我們首先明確了狀態(tài)機(jī)的概念:通過(guò)不同狀態(tài)封裝不同情況的處理邏輯,通過(guò)狀態(tài)的修改來(lái)完成處理邏輯之間的流轉(zhuǎn)。

如果每種狀態(tài)都知道下一個(gè)狀態(tài)是什么,在一個(gè)循環(huán)內(nèi)自動(dòng)完成狀態(tài)流轉(zhuǎn)的狀態(tài)機(jī),就是狀態(tài)自動(dòng)機(jī),當(dāng)狀態(tài)為有限個(gè)時(shí),就是有限狀態(tài)自動(dòng)機(jī)(DFA)。

typescript compiler 就是通過(guò)狀態(tài)自動(dòng)機(jī)來(lái)進(jìn)行處理,封裝了很多個(gè)狀態(tài),每個(gè)狀態(tài)知道下一個(gè)狀態(tài)是什么,直到處理到終止?fàn)顟B(tài),就結(jié)束編譯。

詞法分析中一般會(huì)使用有限狀態(tài)自動(dòng)機(jī)(DFA)來(lái)處理,不同 token 用不同的狀態(tài)來(lái)處理,通過(guò)輸入字符的不同來(lái)做狀態(tài)的流轉(zhuǎn),處理完字符串就完成了分詞。

業(yè)務(wù)代碼中也經(jīng)常會(huì)有不同情況做不同的處理,這些情況在一定的條件時(shí)會(huì)做轉(zhuǎn)換的場(chǎng)景,比如類似開(kāi)始、暫停、結(jié)束、重新開(kāi)始這種。這種代碼就很適合用狀態(tài)機(jī)來(lái)優(yōu)化,不然會(huì)有很多的 if else。

總之,當(dāng)邏輯可以劃分為不同的情況,各種情況之間會(huì)相互轉(zhuǎn)換的時(shí)候就可以用狀態(tài)機(jī)來(lái)優(yōu)化,能夠免去大量的 if else,并且代碼的可讀性、可擴(kuò)展性、可維護(hù)性都會(huì)有一個(gè)很大的提升。

希望這篇文章能夠讓你知道狀態(tài)機(jī)是什么,什么時(shí)候可以用狀態(tài)機(jī),狀態(tài)機(jī)可以帶來(lái)哪些提升,真正在代碼中用起來(lái)。

 

責(zé)任編輯:武曉燕 來(lái)源: 神光的編程秘籍
相關(guān)推薦

2021-09-07 06:40:26

狀態(tài)機(jī)識(shí)別地址

2021-12-07 11:31:47

Python代碼if…elif…els

2022-05-28 16:08:04

前端

2023-03-06 07:35:30

狀態(tài)機(jī)工具訂單狀態(tài)

2020-12-02 13:33:58

函數(shù)指針編程語(yǔ)言

2021-08-19 09:00:00

微服務(wù)開(kāi)發(fā)架構(gòu)

2014-05-21 11:09:56

前端有限狀態(tài)機(jī)

2025-10-09 02:11:00

flatMap工具函數(shù)式

2021-07-08 09:15:20

單片機(jī)編程狀態(tài)機(jī)編程語(yǔ)言

2010-06-18 12:38:38

UML狀態(tài)機(jī)視圖

2022-07-11 08:16:55

策略模式if-else

2020-03-27 10:50:29

DSL 狀態(tài)機(jī)工具

2013-09-03 09:57:43

JavaScript有限狀態(tài)機(jī)

2010-06-18 13:25:44

UML狀態(tài)機(jī)視圖

2022-09-04 15:40:39

JavaScrip狀態(tài)模式軟件

2024-10-10 17:46:06

2021-04-29 09:31:05

前端開(kāi)發(fā)技術(shù)

2010-07-08 13:03:31

UML狀態(tài)機(jī)圖

2011-06-24 16:09:24

Qt 動(dòng)畫 狀態(tài)機(jī)

2011-08-22 10:52:30

iptables狀態(tài)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲国产一二三精品无码| 国产裸舞福利在线视频合集| 亚洲人挤奶视频| 欧美日韩国产另类一区| 国产原创popny丨九色| 久久综合国产| 久久成人在线视频| 青青草原国产在线| 天天综合色天天综合| 人人妻人人添人人爽欧美一区| 欧美亚洲不卡| 97在线视频一区| 亚洲天堂电影| 欧美日韩免费高清一区色橹橹| 国产 porn| 国内精品国产成人| 岛国视频一区免费观看| 欧美大奶一区二区| 中文字幕9999| 免费观看久久久久| 一区二区三区在线视频观看| 中文字幕成人一区| 欧美成人tv| 日韩男女性生活视频| 人狥杂交一区欧美二区| 欧美日韩一级视频| 最美情侣韩剧在线播放| 久久一夜天堂av一区二区三区| 日本一区二区三区视频在线播放 | 91精品中文在线| 狼人精品一区二区三区在线| 在线播放国产一区中文字幕剧情欧美 | 日韩在线观看| 69av成年福利视频| 国产成人免费av一区二区午夜 | 日韩欧美一级在线| 国产精品一国产精品k频道56| 国产欧美精品一区二区| 香蕉久久精品日日躁夜夜躁| 欧美精品videosex性欧美| 日本国产亚洲| 精品国产视频在线| 国产一区二区三区黄网站| 少妇高潮久久77777| 欧美福利在线播放| 国产亚洲人成网站在线观看| 免费高清视频在线一区| 日韩在线视频网站| 一区二区在线视频观看| 2019中文字幕在线观看| 国产99久久| 国产激情综合五月久久| 久久精品不卡| 精品蜜桃一区二区三区| 日韩成人一级片| 懂色av粉嫩av蜜臀av| 国产91精品精华液一区二区三区| 国产日韩亚洲欧美在线| 91丨九色丨黑人外教| 成人au免费视频影院| 亚洲一区二区三区国产| 国产日本在线| 精品国产区一区| 国产黄色一区| 日韩av手机在线看| 欧美色综合网| 制服国产精品| 国产偷v国产偷v亚洲高清| 五月天亚洲激情| 日韩欧美国产视频| 国产欧美久久久久久久久| 亚洲精品日韩久久久| 免费一级欧美片在线观看网站| 97av视频在线| 韩国一区二区三区在线观看| 中文字幕一区二区三区在线乱码 | 国产精品第一| 欧美一级高清免费| 极品少妇一区二区三区| 一本久道久久综合狠狠爱亚洲精品| 国产福利一区在线| 国产精品黄页网站在线播放免费| 动漫精品一区二区| 黄色亚洲网站| 成人黄色影片在线| 蜜臀久久99精品久久久画质超高清 | 国产精品老牛影院在线观看 | 日韩在线视频导航| 欧美理论视频| 伊人久久大香线蕉成人综合网| 91丝袜高跟美女视频| 日韩资源在线| www.日韩欧美| 在线欧美一区| 一区二区成人网| 91精品国产综合久久精品图片 | 国产又粗又大又爽的视频| 国产女同互慰高潮91漫画| 噜噜噜在线观看播放视频| 精品在线视频一区| av成人资源| 任你躁在线精品免费| sm久久捆绑调教精品一区| 国产一级网站视频在线| 精品国产一二| 欧美一级日韩免费不卡| 国内精品视频| 伊人影院在线视频| 欧美a级免费视频| 92福利视频午夜1000合集在线观看| 国产一区二区不卡在线| 中文字幕在线视频观看| 国产精品美女久久| 中日韩午夜理伦电影免费| 日韩在线观看免费高清| 亚洲美女av黄| 91美女片黄在线观看| 亚洲精品视频在线| 亚洲偷欧美偷国内偷| 亚洲精品国产福利| 56国语精品自产拍在线观看| 日本不卡高清视频| 中文字幕乱码亚洲无线精品一区| 在线观看中文字幕的网站| 亚洲久久中文字幕| 欧美中文娱乐网| 国产小视频国产精品| 欧美三区在线视频| 久久亚洲综合色| 亚洲精品视频在线看| 丁香激情综合国产| 久久精品国产网站| 日韩午夜黄色| 好看不卡的中文字幕| a级大胆欧美人体大胆666| 丝袜在线观看| 日本天堂在线| 中文字幕在线视频区| 日韩电影精品| 成人av中文字幕| 亚洲高清一区二区三区| 欧美久久高跟鞋激| 日韩欧美国产视频| 亚洲欧美色一区| 一区二区三区自拍| 91久久久免费一区二区| 欧美影院精品一区| 国产精品免费av| 免费成人在线网站| 日韩高清在线观看| 久热成人在线视频| 成人av网站在线| 99久久精品一区二区| 99re国产精品| 日韩美女国产精品| 久久精品视频一| 在线免费一区| 免费一级特黄录像| 国产美女精品免费电影| 亚洲一区免费网站| 日韩在线导航| 久久久国产欧美| 欧洲国内综合视频| 91一区二区三区四区| 日本高清网站| 国产精品私拍pans大尺度在线| 国产精品区一区二区三区| 中文字幕视频精品一区二区三区| 色欲av无码一区二区人妻| 久久国产精品久久久| 国产日韩av一区二区| 成人春色在线观看免费网站| 成人eeuss影院在线观看| 欧美一级视频一区二区| 亚洲欧美aⅴ...| 天堂美国久久| 黄色片网站在线| 秋霞在线一区二区| 久久精品国产精品亚洲| 国产欧美一区二区三区在线看蜜臀| 国产乱人伦丫前精品视频| h七七www色午夜日本| 国产日韩亚洲欧美| 欧美日韩国产大片| 久久精品国产精品青草| 香蕉久久一区| 动漫h在线观看| 欧美久久综合性欧美| 亚洲美女精品成人在线视频| 97超碰欧美中文字幕| 亚洲天堂日韩在线| 爱爱爱免费视频在线观看| 视频一区视频二区视频三区高| 亚洲精选在线观看| 欧美韩国日本一区| 欧美日韩ab| 欧美色网在线| 免费在线观看麻豆视频| 视频在线99| 2018日韩中文字幕|