欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

看完這篇文章獲得一些java if優(yōu)化技巧

 更新時間:2021年07月15日 11:44:09   作者:香菜聊游戲  
if 是每個語言都有的語法,也是最基礎(chǔ)的語法。因為代碼本來就很晦澀,所以才有了程序員這個中間件,今天就聊一下我的一些關(guān)于 if 思路和總結(jié)

1、if 合并

使用邏輯運算符進行合并if。簡單的if 嵌套可以使用&& 進行合并。簡單的if else 并且操作相同可以使用 || 進行合并,優(yōu)化代碼邏輯,增加可讀性。

注意:邏輯運算符的截斷性,if(a >= 10 || b >= 20) 當a>= 10 成立時 是不會判斷后面的,只要條件成立,則if 判斷結(jié)束。

因此簡單判斷放在最前面,在開發(fā)的過程中,將簡單的邏輯判斷前置,減少判斷的次數(shù),可以提高性能,提高性能!

2、將正常的流程放在函數(shù)的主干執(zhí)行

在開發(fā)中有些同學(xué)會跟著策劃寫邏輯,將策劃的功能描述進行直接轉(zhuǎn)碼,造成了很多判斷的嵌套。

在這時可以將代碼邏輯進行整理,先進行check ,各種不符合條件的判斷提前判斷并結(jié)束函數(shù),最基本的原則就是:將最后的主邏輯留在函數(shù)的主干內(nèi)。

比如下面的場景:玩家需要達到等級100,并且擁有足夠的體力,才能夠參與活動,否則的話則報錯誤碼。

可以看到 主邏輯 doSomeThing 在第一處的時候if的嵌套層數(shù)是2層,在第二處的時候 嵌套層數(shù) 是0 層。在閱讀的代碼的時候,可以直接順序讀下去,將不太需要關(guān)注的分支跳過即可,可讀性有了優(yōu)化,代碼更優(yōu)雅。

3、減少if

1. 使用三元運算符表達式

比如在戰(zhàn)斗的時候,需要根據(jù)玩家的等級進行戰(zhàn)斗力的放大,所有有下面的代碼,可以看到用三元運算符代碼行數(shù)較少,而且逼格顯然比較高。

2.使用java8 中流過濾filter ,不使用if

在開發(fā)的過程中需要過濾某一個類型的道具,在背包內(nèi)查找滿足需要的道具。

下面的代碼傳入需要過濾的道具類型,然后在第一處的地方模擬了背包的數(shù)據(jù),

第二處是使用if的過濾。

第三處是使用stream 進行過濾,可以看到使用java8 避免了使用if判斷,函數(shù)式的接口,優(yōu)雅并且易于理解。

3、使用枚舉

枚舉是我們項目里用的很多的一種解決辦法,比如我們的資源管理,任務(wù)管理,組隊管理等等功能,都是使用了枚舉解決if else 問題,當你面對的一個同樣的問題,只是因為類型的不同的時候,則可以使用枚舉進行優(yōu)化代碼。

下面的枚舉定義了一個抽象方法,由每個枚舉單獨實現(xiàn)。

在使用的時候可以直接使用對應(yīng)的枚舉進行操作,不需要使用if 進行操作,是不是很方便?同時在以后擴展的時候只要增加枚舉,不需要修改原來的代碼?降低了出bug的風險。

4、使用manager

同樣的問題,也可以使用manager進行解決,思路就是將對應(yīng)類型的處理類先進行注冊,等用的時候直接從map中獲取,然后使用,避免了if 的判斷。

比如上期的資源系統(tǒng),就是使用了manager 進行的處理。在游戲啟動的時候注冊了每種資源的處理類,所有的資源類都繼承了同樣的接口,在使用的時候可以直接調(diào)用相同的接口,這樣就沒必要盡心if 判斷。

5、使用Consumer

比如戰(zhàn)斗的時候,需要根據(jù)戰(zhàn)斗的類型不同,然后有不同的處理函數(shù),在這時候可以使用Consumer,將每個單獨的類型單獨處理。避免了使用if

總結(jié):

if 很簡單,但是也有一些技巧。畢竟編程語言的創(chuàng)造者創(chuàng)造簡單的if,for 就表示了這世界所有的邏輯。用好if,增加代碼可讀性,讓自己的代碼更優(yōu)雅,Bug 更少。

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java選擇排序法以及實例詳解

    Java選擇排序法以及實例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于Java選擇排序法以及實例內(nèi)容,并做了詳細分析,有興趣的朋友們可以跟著學(xué)習下。
    2022-11-11
  • Java學(xué)習之異常處理的新特性詳解

    Java學(xué)習之異常處理的新特性詳解

    異常處理機制是Java很早時就搞出來的技術(shù),但在實際應(yīng)用中,我們發(fā)現(xiàn)這個異常處理也有一些不完善的地方,接下來主要給大家介紹一下Java異常處理的一些新特性,需要的朋友可以參考下
    2023-08-08
  • java Tapestry4.1.2入門說明教程

    java Tapestry4.1.2入門說明教程

    不必關(guān)心鏈接!不必關(guān)心請求(http request)到了哪里!不必關(guān)心響應(yīng)(http response)要轉(zhuǎn)向哪里!Tapestry構(gòu)建于底層的request-resonse模式,基于Servlet技術(shù),抽象出面向組件開發(fā)的模型。Tapestry關(guān)心的是:頁面、組件、事件、對象、方法、屬性!
    2008-11-11
  • springboot中將日志信息存儲在catalina.base中過程解析

    springboot中將日志信息存儲在catalina.base中過程解析

    這篇文章主要介紹了springboot中將日志信息存儲在catalina.base中過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-09-09
  • java 全角半角字符轉(zhuǎn)換的方法實例

    java 全角半角字符轉(zhuǎn)換的方法實例

    這篇文章主要介紹了java 全角半角字符轉(zhuǎn)換的方法,大家參考使用吧
    2013-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)詳解

    Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)詳解

    從數(shù)據(jù)結(jié)構(gòu)上看棧和隊列都是線性表,不過是兩種特殊的線性表,棧只允許在的一端進行插人或刪除操作,而隊列只允許在表的一端進行插人操作、而在另一端進行刪除操作,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • java8異步調(diào)用如何使用才是最好的方式

    java8異步調(diào)用如何使用才是最好的方式

    異步調(diào)用主要用于當前程序的執(zhí)行不用等待調(diào)用方法執(zhí)行結(jié)束就可以繼續(xù)執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于java8異步調(diào)用如何使用才是最好的方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • Spring實戰(zhàn)之使用@POSTConstruct和@PreDestroy定制生命周期行為操作示例

    Spring實戰(zhàn)之使用@POSTConstruct和@PreDestroy定制生命周期行為操作示例

    這篇文章主要介紹了Spring實戰(zhàn)之使用@POSTConstruct和@PreDestroy定制生命周期行為操作,結(jié)合實例形式詳細分析了Spring使用@POSTConstruct和@PreDestroy定制生命周期相關(guān)接口定義、配置與功能實現(xiàn)技巧,需要的朋友可以參考下
    2019-12-12
  • java中ThreadLocal和ThreadLocalMap淺析

    java中ThreadLocal和ThreadLocalMap淺析

    這篇文章主要介紹了java中ThreadLocal和ThreadLocalMap淺析,ThreadLocal類用來設(shè)置線程私有變量?本身不儲存值?主要提供自身引用?和?操作ThreadLocalMap?屬性值得方法,需要的朋友可以參考下
    2023-09-09
  • springboot集成測試容器重啟問題的處理

    springboot集成測試容器重啟問題的處理

    這篇文章主要介紹了springboot集成測試容器重啟問題的處理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論