
目錄
1、if 合并
2、將正常的流程放在函式的主干執行
3、減少if
1. 使用三元運算子運算式
2.使用java8 中流過濾filter ,不使用if
3、使用列舉
4、使用manager
5、使用Consumer
總結:
今天是2020年1024,程式員的節日,祝大家節日快樂,
最近在代碼review的程序中發現了一些問題,這些問題雖然不影響邏輯,但是對代碼的可讀性,安全性留下了隱患,今天這篇文章寫在紙上寫了好多天,一直放在口袋里,一直作業比較忙沒時間寫,今天加個班寫一下,
if 是每個語言都有的語法,也是最基礎的語法,因為代碼本來就很晦澀,所以才有了程式員這個中間件,碼農,怎么樣才能寫出好讀的,不容易出錯的代碼?不人為的增加代碼的難度吶?這是一個大問題,今天就聊一下我的一些關于 if 思路和總結,
1、if 合并
使用邏輯運算子進行合并if,簡單的if 嵌套可以使用&& 進行合并,簡單的if else 并且操作相同可以使用 || 進行合并,優化代碼邏輯,增加可讀性,


注意:邏輯運算子的截斷性,if(a >= 10 || b >= 20) 當a>= 10 成立時 是不會判斷后面的,只要條件成立,則if 判斷結束,
因此簡單判斷放在最前面,在開發的程序中,將簡單的邏輯判斷前置,減少判斷的次數,可以提高性能,提高性能!
2、將正常的流程放在函式的主干執行
在開發中有些同學會跟著策劃寫邏輯,將策劃的功能描述進行直接轉碼,造成了很多判斷的嵌套,
在這時可以將代碼邏輯進行整理,先進行check ,各種不符合條件的判斷提前判斷并結束函式,最基本的原則就是:將最后的主邏輯留在函式的主干內,
比如下面的場景:玩家需要達到等級100,并且擁有足夠的體力,才能夠參與活動,否則的話則報錯誤碼,

可以看到 主邏輯 doSomeThing 在第一處的時候if的嵌套層數是2層,在第二處的時候 嵌套層數 是0 層,在閱讀的代碼的時候,可以直接順序讀下去,將不太需要關注的分支跳過即可,可讀性有了優化,代碼更優雅,
3、減少if
1. 使用三元運算子運算式
比如在戰斗的時候,需要根據玩家的等級進行戰斗力的放大,所有有下面的代碼,可以看到用三元運算子代碼行數較少,而且逼格顯然比較高,

2.使用java8 中流過濾filter ,不使用if
在開發的程序中需要過濾某一個型別的道具,在背包內查找滿足需要的道具,
下面的代碼傳入需要過濾的道具型別,然后在第一處的地方模擬了背包的資料,
第二處是使用if的過濾,
第三處是使用stream 進行過濾,可以看到使用java8 避免了使用if判斷,函式式的介面,優雅并且易于理解,

3、使用列舉
列舉是我們專案里用的很多的一種解決辦法,比如我們的資源管理,任務管理,組隊管理等等功能,都是使用了列舉解決if else 問題,當你面對的一個同樣的問題,只是因為型別的不同的時候,則可以使用列舉進行優化代碼,
下面的列舉定義了一個抽象方法,由每個列舉單獨實作,

在使用的時候可以直接使用對應的列舉進行操作,不需要使用if 進行操作,是不是很方便?同時在以后擴展的時候只要增加列舉,不需要修改原來的代碼?降低了出bug的風險,
4、使用manager
同樣的問題,也可以使用manager進行解決,思路就是將對應型別的處理類先進行注冊,等用的時候直接從map中獲取,然后使用,避免了if 的判斷,
比如上期的資源系統,就是使用了manager 進行的處理,在游戲啟動的時候注冊了每種資源的處理類,所有的資源類都繼承了同樣的介面,在使用的時候可以直接呼叫相同的介面,這樣就沒必要盡心if 判斷,


5、使用Consumer
比如戰斗的時候,需要根據戰斗的型別不同,然后有不同的處理函式,在這時候可以使用Consumer,將每個單獨的型別單獨處理,避免了使用if

總結:
if 很簡單,但是也有一些技巧,畢竟編程語言的創造者創造簡單的if,for 就表示了這世界所有的邏輯,用好if,增加代碼可讀性,讓自己的代碼更優雅,Bug 更少,寫篇文章不容易,希望能獲得大家的關注,點贊,轉發 三連,謝謝,
常規福利時間

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/193304.html
標籤:其他
下一篇:合并果子(經典優先佇列)
