91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

為什么不使用If-Else語句

發布時間:2021-10-29 20:13:18 來源:億速云 閱讀:178 作者:iii 欄目:web開發

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

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

可以結束這一切了。在任何新的條件要求下,使用If-Else都會增加復雜性。用狀態對象來代替If-Else吧。應用狀態模式,你只需使用專用狀態對象而無需使用If-Else語句來更改對象行為。

像下面這樣的代碼時代已經一去不復返了:

為什么不使用If-Else語句

觸發PTSD警告

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

另外,如果你認為創建新類而非簡單地使用分支語句聽起來很煩人,那么請一定等到實際使用的時候,你會發現這種方法簡潔而優雅。除了“  D”部分之外,它還將使你的代碼庫更加扎實。

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

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

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

為什么不使用If-Else語句

代碼中重構分支邏輯的過程一共有三步:

  • 創建一個抽象基類

  • 將每個狀態實現為繼承自基本狀態的單獨類

  • 讓Booking`類具有私有或內部方法,該方法以狀態基類為參數

演示時間到!

首先,需要一個將繼承所有狀態的基類。

為什么不使用If-Else語句

請注意,該基類還具有兩種方法,Accept和Cancel——盡管此處將它們標記為內部。此外,基態具有“特殊” EnterState(Booking  booking)方法。每當將新狀態分配給預訂對象時,就會調用此方法。

其次,為要代表的每個狀態創建單獨的類。

為什么不使用If-Else語句

注意,如上圖所示,每個類如何表示一個狀態。此外,ExpiredState和CancelledState不會將預訂轉換為新狀態。這兩類在本質上與Null  Object Pattern非常相似。

最后,預訂類型本身。

為什么不使用If-Else語句

看到預訂類型如何簡單地將Accept和Cancel的實現委派給其狀態對象了嗎?這樣做可以使我們刪除許多條件邏輯,并使每個狀態僅關注對自己重要的事情,當前狀態也有機會將預訂過渡到新狀態。

Q&A

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

如果說通常需要使用某些條件檢查來實現新功能,那么現在只需創建一個新的狀態類即可,你將不再需要費力地處理if-else語句了。

2. 如何將狀態對象保留在數據庫中?

不,你不想。

當將對象保存到例如SQL或NoSQL數據庫時,狀態對象并不重要,這時只有了解對象的狀態及其應如何映射到列是重要的。你可以將狀態映射到友好類型名稱,枚舉或整數。只要你愿意,總有某種方法可以將保存的值轉換回狀態對象。

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

它們是必不可少的,特別是當用作保護子句時。但If-Else組合是造成可維護性難題的根本原因。

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

到此,相信大家對“為什么不使用If-Else語句”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皋兰县| 绥棱县| 松滋市| 巨野县| 武胜县| 绩溪县| 湘西| 兴文县| 贵溪市| 通州区| 乐昌市| 内丘县| 商河县| 苍梧县| 乌鲁木齐县| 无极县| 洛宁县| 东莞市| 理塘县| 乌苏市| 和田市| 启东市| 柘城县| 镇雄县| 韶山市| 寿宁县| 宜黄县| 抚顺县| 云龙县| 东明县| 紫云| 乐至县| 土默特左旗| 乌拉特后旗| 寻甸| 曲阜市| 四子王旗| 仪陇县| 湾仔区| 沅陵县| 万山特区|