成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

為什么不使用If-Else語句

本篇內(nèi)容主要講解“為什么不使用If-Else語句”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“為什么不使用If-Else語句”吧!

創(chuàng)新互聯(lián)公司專注于葉城企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。葉城網(wǎng)站建設(shè)公司,為葉城等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

If-Else語句我們再熟悉不過了,你可能看過無數(shù)的相關(guān)教程,讀過很多編程書籍,來提升將If-Else用作de  facto分支技術(shù)的方法,甚至可能你的默認(rèn)模式就是使用If-Else。

可以結(jié)束這一切了。在任何新的條件要求下,使用If-Else都會(huì)增加復(fù)雜性。用狀態(tài)對(duì)象來代替If-Else吧。應(yīng)用狀態(tài)模式,你只需使用專用狀態(tài)對(duì)象而無需使用If-Else語句來更改對(duì)象行為。

像下面這樣的代碼時(shí)代已經(jīng)一去不復(fù)返了:

為什么不使用If-Else語句

觸發(fā)PTSD警告

你肯定曾經(jīng)寫過更復(fù)雜的分支,我也曾是這么做的。上面的分支邏輯甚至還不是很復(fù)雜,但如果嘗試添加新條件,事情肯定會(huì)越弄越糟。

另外,如果你認(rèn)為創(chuàng)建新類而非簡單地使用分支語句聽起來很煩人,那么請一定等到實(shí)際使用的時(shí)候,你會(huì)發(fā)現(xiàn)這種方法簡潔而優(yōu)雅。除了“  D”部分之外,它還將使你的代碼庫更加扎實(shí)。

那么如何避免混亂的分支代碼呢?

我們將研究如何在生產(chǎn)就緒代碼中替換If-Else分支。這是一個(gè)虛構(gòu)的例子,但是方法與我在大型客戶的代碼庫中使用的方法相同。

創(chuàng)建一個(gè)非常簡單的Booking類,其中包含一些狀態(tài)。它還有兩個(gè)公共方法:Accept()and  Cancel().。我盡力繪制了一個(gè)圖表,顯示了預(yù)訂可能處于的不同狀態(tài)。

為什么不使用If-Else語句

代碼中重構(gòu)分支邏輯的過程一共有三步:

  • 創(chuàng)建一個(gè)抽象基類

  • 將每個(gè)狀態(tài)實(shí)現(xiàn)為繼承自基本狀態(tài)的單獨(dú)類

  • 讓Booking`類具有私有或內(nèi)部方法,該方法以狀態(tài)基類為參數(shù)

演示時(shí)間到!

首先,需要一個(gè)將繼承所有狀態(tài)的基類。

為什么不使用If-Else語句

請注意,該基類還具有兩種方法,Accept和Cancel——盡管此處將它們標(biāo)記為內(nèi)部。此外,基態(tài)具有“特殊” EnterState(Booking  booking)方法。每當(dāng)將新狀態(tài)分配給預(yù)訂對(duì)象時(shí),就會(huì)調(diào)用此方法。

其次,為要代表的每個(gè)狀態(tài)創(chuàng)建單獨(dú)的類。

為什么不使用If-Else語句

注意,如上圖所示,每個(gè)類如何表示一個(gè)狀態(tài)。此外,ExpiredState和CancelledState不會(huì)將預(yù)訂轉(zhuǎn)換為新狀態(tài)。這兩類在本質(zhì)上與Null  Object Pattern非常相似。

最后,預(yù)訂類型本身。

為什么不使用If-Else語句

看到預(yù)訂類型如何簡單地將Accept和Cancel的實(shí)現(xiàn)委派給其狀態(tài)對(duì)象了嗎?這樣做可以使我們刪除許多條件邏輯,并使每個(gè)狀態(tài)僅關(guān)注對(duì)自己重要的事情,當(dāng)前狀態(tài)也有機(jī)會(huì)將預(yù)訂過渡到新狀態(tài)。

Q&A

1. 如何處理新的條件功能?

如果說通常需要使用某些條件檢查來實(shí)現(xiàn)新功能,那么現(xiàn)在只需創(chuàng)建一個(gè)新的狀態(tài)類即可,你將不再需要費(fèi)力地處理if-else語句了。

2. 如何將狀態(tài)對(duì)象保留在數(shù)據(jù)庫中?

不,你不想。

當(dāng)將對(duì)象保存到例如SQL或NoSql數(shù)據(jù)庫時(shí),狀態(tài)對(duì)象并不重要,這時(shí)只有了解對(duì)象的狀態(tài)及其應(yīng)如何映射到列是重要的。你可以將狀態(tài)映射到友好類型名稱,枚舉或整數(shù)。只要你愿意,總有某種方法可以將保存的值轉(zhuǎn)換回狀態(tài)對(duì)象。

3. 但是你還在使用If’s嗎?

它們是必不可少的,特別是當(dāng)用作保護(hù)子句時(shí)。但I(xiàn)f-Else組合是造成可維護(hù)性難題的根本原因。

復(fù)雜性不是源于你擁有的類的數(shù)量,而是源于這些類承擔(dān)的功能。擁有許多專門的類將使你的代碼庫更具可讀性與可維護(hù)性,并且從總體上來說,也更易于使用。

到此,相信大家對(duì)“為什么不使用If-Else語句”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁標(biāo)題:為什么不使用If-Else語句
標(biāo)題鏈接:http://jinyejixie.com/article46/ijcheg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、營銷型網(wǎng)站建設(shè)企業(yè)建站、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
利津县| 宁河县| 天祝| 梓潼县| 濉溪县| 常德市| 静海县| 繁昌县| 成武县| 临颍县| 广饶县| 封丘县| 东港市| 靖宇县| 读书| 静海县| 曲靖市| 湄潭县| 通山县| 梨树县| 印江| 花垣县| 望江县| 凤庆县| 宜春市| 米林县| 富裕县| 冕宁县| 藁城市| 厦门市| 隆回县| 曲麻莱县| 津市市| 弥渡县| 嘉义市| 阿克苏市| 南汇区| 明水县| 莆田市| 芮城县| 淮安市|