精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

徹底消滅if-else,你需要這8種方案!

開發 架構 開發工具
代碼中如果 if-else 比較多,閱讀起來比較困難,維護起來也比較困難,很容易出 Bug,接下來,本文將介紹優化 if-else 代碼的八種方案。

代碼中如果 if-else 比較多,閱讀起來比較困難,維護起來也比較困難,很容易出 Bug,接下來,本文將介紹優化 if-else 代碼的八種方案。

[[318084]]

圖片來自 Pexels

優化方案 1:提前 return,去除不必要的 else

如果 if-else 代碼塊包含 return 語句,可以考慮通過提前 return,把多余 else 干掉,使代碼更加優雅。

優化前:

  1. if(condition){ 
  2.     //doSomething 
  3. }else
  4.     return ; 

優化后:

  1. if(!condition){ 
  2.     return ; 
  3. //doSomething 

優化方案 2:使用條件三目運算符

使用條件三目運算符可以簡化某些 if-else,使代碼更加簡潔,更具有可讀性。

優化前:

  1. int  price ; 
  2. if(condition){ 
  3.     price = 80; 
  4. }else
  5.     price = 100; 

優化后:

  1. int price = condition?80:100; 

優化方案 3:使用枚舉

在某些時候,使用枚舉也可以優化 if-else 邏輯分支,按個人理解,它也可以看作一種表驅動方法。

優化前:

  1. String OrderStatusDes; 
  2. if(orderStatus==0){ 
  3.     OrderStatusDes ="訂單未支付"
  4. }else if(OrderStatus==1){ 
  5.     OrderStatusDes ="訂單已支付"
  6. }else if(OrderStatus==2){ 
  7.    OrderStatusDes ="已發貨";  
  8. ... 

優化后:(先定義一個枚舉)

  1. public enum OrderStatusEnum { 
  2.     UN_PAID(0,"訂單未支付"),PAIDED(1,"訂單已支付"),SENDED(2,"已發貨"),; 
  3.  
  4.     private int index
  5.     private String desc
  6.  
  7.     public int getIndex() { 
  8.         return index
  9.     } 
  10.  
  11.     public String getDesc() { 
  12.         return desc
  13.     } 
  14.  
  15.     OrderStatusEnum(int index, String desc){ 
  16.         this.index = index
  17.         this.desc =desc
  18.     } 
  19.  
  20.     OrderStatusEnum of(int orderStatus) { 
  21.         for (OrderStatusEnum temp : OrderStatusEnum.values()) { 
  22.             if (temp.getIndex() == orderStatus) { 
  23.                 return temp
  24.             } 
  25.         } 
  26.         return null
  27.     } 

有了枚舉之后,以上 if-else 邏輯分支,可以優化為一行代碼:

  1. String OrderStatusDes = OrderStatusEnum.0f(orderStatus).getDesc(); 

優化方案 4:合并條件表達式

如果有一系列條件返回一樣的結果,可以將它們合并為一個條件表達式,讓邏輯更加清晰。

優化前:

  1. double getVipDiscount() { 
  2.         if(age<18){ 
  3.             return 0.8; 
  4.         } 
  5.         if("深圳".equals(city)){ 
  6.             return 0.8; 
  7.         } 
  8.         if(isStudent){ 
  9.             return 0.8; 
  10.         } 
  11.         //do somethig 
  12.     } 

優化后:

  1. double getVipDiscount(){ 
  2.         if(age<18|| "深圳".equals(city)||isStudent){ 
  3.             return 0.8; 
  4.         } 
  5.         //doSomthing 
  6.     } 

優化方案 5:使用 Optional

有時候 if-else 比較多,是因為非空判斷導致的,這時候你可以使用 java8 的 Optional 進行優化。

優化前:

  1. String str = "jay@huaxiao"
  2. if (str != null) { 
  3.     System.out.println(str); 
  4. else { 
  5.     System.out.println("Null"); 

優化后:

  1. Optional<String> strOptional = Optional.of("jay@huaxiao"); 
  2. strOptional.ifPresentOrElse(System.out::println, () -> System.out.println("Null")); 

優化方案 6:表驅動法

表驅動法,又稱之為表驅動、表驅動方法。表驅動方法是一種使你可以在表中查找信息,而不必用很多的邏輯語句(if 或 case)來把它們找出來的方法。

以下的 demo,把 map 抽象成表,在 map 中查找信息,而省去不必要的邏輯語句。

優化前:

  1. if (param.equals(value1)) { 
  2.     doAction1(someParams); 
  3. else if (param.equals(value2)) { 
  4.     doAction2(someParams); 
  5. else if (param.equals(value3)) { 
  6.     doAction3(someParams); 
  7. // ... 

優化后:

  1. Map<?, Function<?> action> actionMappings = new HashMap<>(); // 這里泛型 ? 是為方便演示,實際可替換為你需要的類型 
  2.  
  3. // 初始化 
  4. actionMappings.put(value1, (someParams) -> { doAction1(someParams)}); 
  5. actionMappings.put(value2, (someParams) -> { doAction2(someParams)}); 
  6. actionMappings.put(value3, (someParams) -> { doAction3(someParams)}); 
  7.  
  8. // 省略多余邏輯語句 
  9. actionMappings.get(param).apply(someParams); 

優化方案 7:優化邏輯結構,讓正常流程走主干

優化前:

  1. public double getAdjustedCapital(){ 
  2.     if(_capital <= 0.0 ){ 
  3.         return 0.0; 
  4.     } 
  5.     if(_intRate > 0 && _duration >0){ 
  6.         return (_income / _duration) *ADJ_FACTOR; 
  7.     } 
  8.     return 0.0; 

優化后:

  1. public double getAdjustedCapital(){ 
  2.     if(_capital <= 0.0 ){ 
  3.         return 0.0; 
  4.     } 
  5.     if(_intRate <= 0 || _duration <= 0){ 
  6.         return 0.0; 
  7.     } 
  8.  
  9.     return (_income / _duration) *ADJ_FACTOR; 

將條件反轉使異常情況先退出,讓正常流程維持在主干流程,可以讓代碼結構更加清晰。

優化方案 8:策略模式+工廠方法消除 if else

假設需求為,根據不同勛章類型,處理相對應的勛章服務,優化前有以下代碼:

  1. String medalType = "guest"
  2. if ("guest".equals(medalType)) { 
  3.     System.out.println("嘉賓勛章"); 
  4.  } else if ("vip".equals(medalType)) { 
  5.     System.out.println("會員勛章"); 
  6. else if ("guard".equals(medalType)) { 
  7.     System.out.println("展示守護勛章"); 
  8. ... 

首先,我們把每個條件邏輯代碼塊,抽象成一個公共的接口,可以得到以下代碼:

  1. //勛章接口 
  2. public interface IMedalService { 
  3.     void showMedal(); 

我們根據每個邏輯條件,定義相對應的策略實現類,可得以下代碼:

  1. //守護勛章策略實現類 
  2. public class GuardMedalServiceImpl implements IMedalService { 
  3.     @Override 
  4.     public void showMedal() { 
  5.         System.out.println("展示守護勛章"); 
  6.     } 
  7. //嘉賓勛章策略實現類 
  8. public class GuestMedalServiceImpl implements IMedalService { 
  9.     @Override 
  10.     public void showMedal() { 
  11.         System.out.println("嘉賓勛章"); 
  12.     } 
  13. //VIP勛章策略實現類 
  14. public class VipMedalServiceImpl implements IMedalService { 
  15.     @Override 
  16.     public void showMedal() { 
  17.         System.out.println("會員勛章"); 
  18.     } 

接下來,我們再定義策略工廠類,用來管理這些勛章實現策略類,如下:

  1. //勛章服務工產類 
  2. public class MedalServicesFactory { 
  3.  
  4.     private static final Map<String, IMedalService> map = new HashMap<>(); 
  5.     static { 
  6.         map.put("guard", new GuardMedalServiceImpl()); 
  7.         map.put("vip", new VipMedalServiceImpl()); 
  8.         map.put("guest", new GuestMedalServiceImpl()); 
  9.     } 
  10.     public static IMedalService getMedalService(String medalType) { 
  11.         return map.get(medalType); 
  12.     } 

使用了策略+工廠模式之后,代碼變得簡潔多了,如下:

  1. public class Test { 
  2.     public static void main(String[] args) { 
  3.         String medalType = "guest"
  4.         IMedalService medalService = MedalServicesFactory.getMedalService(medalType); 
  5.         medalService.showMedal(); 
  6.     } 

參考與感謝:

  • 6 個實例詳解如何把 if-else 代碼重構成高質量代碼
  • 如何 “干掉” if...else

 

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2020-04-20 15:40:03

if-elseJava優化

2021-04-13 06:39:13

代碼重構code

2021-03-10 07:20:43

if-else靜態代碼

2021-11-04 08:53:00

if-else代碼Java

2023-06-02 07:30:24

If-else結構流程控制

2020-05-13 14:15:25

if-else代碼前端

2025-10-27 01:33:00

if-else代碼重構

2024-04-26 08:58:54

if-else代碼JavaSpring

2013-03-06 10:28:57

ifJava

2018-08-10 00:03:08

網速網絡連接Wi-Fi

2022-04-13 14:31:44

區塊鏈自動機器人售票

2020-10-22 09:20:22

SQLNoSQL 數據庫

2022-07-11 08:16:55

策略模式if-else

2017-02-05 14:39:12

2017-04-18 12:21:01

神經網絡深度學習設計模式

2020-12-15 09:31:58

CTOif-else代碼

2025-04-24 08:40:00

JavaScript代碼return語句

2025-07-11 01:45:00

API監控Spring

2020-04-09 08:29:50

編程語言事件驅動

2025-06-26 01:10:00

服務定位解析器Spring
點贊
收藏

51CTO技術棧公眾號

国产成人精品综合| 亚洲精品国产福利| 亚洲激情一区二区| 一级欧美一级日韩| 黄色一区二区三区四区| 亚洲精品中文字| 国产免费又粗又猛又爽| www视频在线免费观看| 风间由美性色一区二区三区| 18一19gay欧美视频网站| 欧美18—19性高清hd4k| 老司机亚洲精品一区二区| 午夜久久福利影院| 在线天堂一区av电影| 天堂在线观看av| 久久国产免费看| 5566日本婷婷色中文字幕97| 国产老头老太做爰视频| 欧美女王vk| 日韩一区二区视频在线观看| www黄色在线| 黑人玩欧美人三根一起进| 中文字幕免费一区| 国产麻豆一区二区三区在线观看| 亚洲资源在线播放| 国产精品视频久久一区| 九九视频这里只有精品| 色欲狠狠躁天天躁无码中文字幕| 国产成人夜色高潮福利影视 | 国产成人精品一区二三区| 国产精品久久久久9999赢消| 亚洲精品日韩在线| 97人妻精品一区二区三区免费 | 色又黄又爽网站www久久| 国产免费内射又粗又爽密桃视频| 成人免费视频| 91免费在线视频观看| 国产91视觉| 国产精品探花视频| 蜜桃视频在线观看一区| 欧洲亚洲在线视频| 国产一级精品视频| 在线日韩欧美| 欧美激情第1页| 91杏吧porn蝌蚪| 91中文字幕精品永久在线| 亚洲美女黄色片| 丰满大乳奶做爰ⅹxx视频| 久久伊人精品| 日韩一区二区在线观看视频播放| 91av视频免费观看| 国产95亚洲| 91精品国产福利在线观看| 青青草原国产在线视频| 欧美激情啪啪| 欧美人牲a欧美精品| 手机视频在线观看| 亚洲国产伊人| 在线不卡中文字幕播放| 爱豆国产剧免费观看大全剧苏畅 | 永久av在线| 国产精品视频一二三| 手机成人在线| 日本中文字幕在线播放| 中文字幕一区日韩精品欧美| 一区二区三区四区五区视频| 亚洲搞黄视频| 亚洲人午夜精品天堂一二香蕉| 日本不卡一区二区三区四区| 成人免费网站在线观看视频| 一区二区三区色| 欧美乱大交xxxxx潮喷l头像| 天堂资源在线| 欧美在线高清视频| 午夜免费一级片| **爰片久久毛片| 亚洲成人亚洲激情| 色一情一交一乱一区二区三区| 日韩在线欧美| 欧美日韩xxx| 亚洲永久精品在线观看| 欧美aaaaa成人免费观看视频| 国产美女久久精品| 亚洲精品成av人片天堂无码 | 亚洲美洲欧洲综合国产一区| 欧美在线视频观看| 亚洲一级片免费看| 国产 欧美在线| 欧美极品视频一区二区三区| 午夜在线视频| 性做久久久久久久免费看| 91av在线免费播放| 精品国产亚洲一区二区三区| 日韩av在线电影网| 美女网站视频色| 狠狠爱综合网| 欧美在线视频a| 国产又粗又大又黄| 91视频免费播放| 看一级黄色录像| 综合日韩av| 日韩一区二区三区免费观看| 在哪里可以看毛片| 欧美精品偷拍| 国产精品免费电影| 日韩一级片免费| 综合激情成人伊人| 久久久久人妻精品一区三寸| 伊人久久一区| 亚洲欧美日韩天堂| 国产第一页第二页| 久久99精品国产| 九色视频成人porny| 国产精品扒开做爽爽爽的视频| 欧美日韩亚洲精品一区二区三区| 肉色超薄丝袜脚交| 欧美综合一区| 欧美精品videos另类日本| 亚洲天堂男人网| 97久久超碰国产精品| 欧美大片免费播放| 亚洲天堂1区| 日韩精品欧美激情| 国产一级二级三级| 蜜桃视频一区二区| 日本精品免费| 精精国产xxxx视频在线野外| 日韩免费观看高清完整版 | 成人免费一区二区三区视频| 日韩a在线播放| 国内精品麻豆美女在线播放视频 | 免费看成人午夜电影| 天堂av中文在线| 制服丝袜亚洲色图| 啪啪一区二区三区| 日本va欧美va瓶| 欧美日韩精品一区| 自拍偷拍亚洲视频| 日韩av在线一区| 国产成人精品亚洲男人的天堂| 国内精品伊人久久久久av影院| 午夜视频久久久| 成人做爰视频www| 亚洲视频电影图片偷拍一区| 亚洲男人的天堂在线视频| 99久久久精品| 99精品在线免费视频| www.国产精品一区| 97视频人免费观看| 午夜激情小视频| 欧美午夜视频一区二区| 少妇精品一区二区| 国产精品久久久久久久免费软件 | a级片在线播放| 日韩理论片在线| 图片区乱熟图片区亚洲| 午夜国产精品视频| 国产伦理一区二区三区| 国产美女高潮在线观看| 亚洲奶大毛多的老太婆| 夜夜爽妓女8888视频免费观看| 久久精品水蜜桃av综合天堂| 啊啊啊国产视频| 欧美日韩在线二区| 成人国内精品久久久久一区| 超碰免费公开在线| 欧美精品一区二区不卡| 日韩高清精品免费观看| 久久一区二区三区四区| 天天视频天天爽| 欧美99在线视频观看| 国产精品乱码视频| 欧洲av不卡| 久久精品视频播放| 亚洲免费成人在线| 一本大道av伊人久久综合| 五月天精品在线| 国产一本一道久久香蕉| 黄色三级中文字幕| 你微笑时很美电视剧整集高清不卡| 国产精品va在线| 黄网站免费在线观看| 精品福利二区三区| 波多野结衣一区二区三区在线| 亚洲婷婷综合色高清在线| 老司机免费视频| 日本va欧美va精品| 免费看欧美一级片| av中文字幕一区二区| 91亚洲精品一区| 日本黄色免费在线| 日韩在线视频免费观看| 色屁屁草草影院ccyycom| 欧美色成人综合| 免费在线看黄网址| 久久久电影一区二区三区| 91香蕉视频免费看| 日韩国产在线观看| 性高湖久久久久久久久aaaaa| 黑丝美女一区二区| 国产精品国色综合久久| 成人高清一区| 91精品国产99| a免费在线观看| 国产午夜精品全部视频在线播放| www.国产三级| 欧美日韩另类一区| 亚洲天堂一区在线观看| 亚洲伊人色欲综合网| 久久午夜精品视频| 91麻豆swag| 久久黄色一级视频| 麻豆国产欧美日韩综合精品二区| 欧美一区二区三区爽大粗免费| 国产国产精品| 四虎一区二区| 免费久久精品| 久久久久久国产精品免费免费| 欧美视频精品全部免费观看| 国产精品久久久久77777| 无码小电影在线观看网站免费| 欧美日韩成人黄色| 九色porny丨首页在线| 亚洲欧洲日韩国产| 五月婷婷丁香花| 精品对白一区国产伦| 97精品久久人人爽人人爽| 91久久精品国产91性色tv| www.天天色| 亚洲一区二区视频在线| 久艹在线观看视频| 国产精品妹子av| 亚洲av无码国产精品麻豆天美| 99亚偷拍自图区亚洲| 911亚洲精选| 夫妻av一区二区| aaaaa黄色片| 国产成人精品一区二区三区网站观看| 在线观看免费污视频| 日韩avvvv在线播放| 欧美日韩怡红院| 日韩1区2区日韩1区2区| 在线观看高清免费视频| 日本成人在线电影网| www.超碰com| 蜜桃精品视频在线观看| 高清一区在线观看| 免费在线成人网| 亚洲美女爱爱视频| 久久国产剧场电影| 手机在线视频一区| 国产一区二三区好的| 国产精品久久久久久9999| 激情综合色播激情啊| 国产欧美一区二| 国产资源在线一区| 日本泡妞xxxx免费视频软件| 国产成人丝袜美腿| 波多野吉衣在线视频| 国产**成人网毛片九色| 亚洲一级Av无码毛片久久精品| 成人午夜大片免费观看| 久久一区二区电影| 国产情人综合久久777777| 无码少妇精品一区二区免费动态| 欧美国产激情二区三区| 人人干在线观看| 一区二区三区国产豹纹内裤在线| 国产在线观看免费av| 欧美日韩国产区| 波多野结衣一区二区三区四区| 欧美日韩美少妇| 亚洲av无码国产精品永久一区| 亚洲高清一区二| 搞黄视频在线观看| 日韩一区二区欧美| 丰满的护士2在线观看高清| 8090成年在线看片午夜| 欧美日韩亚洲国产| 91久久久久久久久久久| 亚洲精品大片| 91精品久久久久久久久| 97se亚洲国产一区二区三区| 久久精品成人一区二区三区蜜臀| 神马电影久久| 自拍视频一区二区三区| 你懂的国产精品| 欧美日韩黄色一级片| 老司机精品视频在线| 最新版天堂资源在线| 久久久www成人免费毛片麻豆| 国产精品视频一区二区在线观看| 亚洲国产成人av| 黄色污污视频软件| 欧美r级电影在线观看| 国产在线视频资源| 欧美丰满少妇xxxxx| 欧美男女交配| 国产传媒一区| 日本不卡二三区| 欧美日韩成人免费视频| 久久精品国产99| 一二三不卡视频| 亚洲精品久久久蜜桃| 中文字幕精品视频在线观看| 欧美videofree性高清杂交| 国产露出视频在线观看| 久久久亚洲国产天美传媒修理工| 九九久久国产| 麻豆成人av| 亚洲午夜伦理| 九一精品久久久| 五月婷婷激情网| 日韩一区二区三区在线观看 | 国产亚洲精品福利| 久久伊人成人网| 欧美色综合久久| 青草久久伊人| 97精品国产97久久久久久免费| 日韩一级特黄| 亚洲春色在线| 久久久久.com| 三级黄色片网站| 午夜精品福利在线| 国产激情视频在线播放| 日韩视频在线免费| www.国产精品| 欧美高清视频一区| av不卡免费看| www.啪啪.com| 亚洲自拍偷拍麻豆| 国产suv精品一区二区69| 视频在线观看99| 成人国产精品| 亚洲欧洲精品在线| 免费在线观看一区二区三区| 国产呦小j女精品视频| 五月天欧美精品| 黄色av中文字幕| 性欧美亚洲xxxx乳在线观看| 538任你躁精品视频网免费| 影音先锋成人资源网站| 国产一区二区三区蝌蚪| 精品无码一区二区三区蜜臀| 欧美日本一区二区三区四区| 尤物网在线观看| 91精品视频专区| 一本一本久久a久久综合精品| 福利视频999| 亚洲欧美精品午睡沙发| 精品免费久久久| 久久久欧美一区二区| 第一区第二区在线| 日本福利视频在线| 91女人视频在线观看| 波多野结衣视频在线观看| 国产一区二区三区丝袜| 四虎成人精品一区二区免费网站| 亚洲一区三区电影在线观看| 黄色小说综合网站| 欧美日韩在线视频免费| 精品国产制服丝袜高跟| 国产高清视频色在线www| 久久99国产精品99久久| 丝瓜av网站精品一区二区| a天堂中文字幕| 欧美日韩情趣电影| 最新国产在线拍揄自揄视频| 99c视频在线| 亚洲精选91| 久久久视频6r| 制服.丝袜.亚洲.中文.综合| 国产经典三级在线| 你懂的网址一区二区三区| 日本不卡一二三区黄网| 波多野结衣亚洲一区二区| 精品噜噜噜噜久久久久久久久试看 | 区一区二视频| 天堂社区在线视频| 亚洲美女免费视频| 手机在线精品视频| 国产精品美女在线观看| 欧美一区影院| 双性尿奴穿贞c带憋尿| 欧美日韩国产一区| 国产福利在线免费观看| 日韩亚洲不卡在线| 高清av一区二区| 免费无码国产精品| 有码中文亚洲精品| 天堂久久av| 无码少妇一区二区三区芒果| 亚洲精品高清在线| 国内精品一区视频| 成人免费看片网址| 美腿丝袜亚洲一区| 久久黄色精品视频| 欧美xxxx做受欧美| 国产最新精品| 西西大胆午夜视频|