<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      為什么阿里巴巴Java開發手冊中不允許魔法值出現在代碼中?

      在閱讀《阿里巴巴Java開發手冊》時,發現有一條關于關于常量定義的規約,具體內容如下:

      圖中的反例是將數據緩存起來,并使用魔法值加鏈路 id 組成 key,這就可能會出現其他開發人員在復制粘貼的時候,少復制 _ 的情況發生,這種錯誤很難去檢查到,因為讀取緩存不存在,可能會去數據庫讀取,很難察覺到。

      如果在生產環境中,大量的請求進來,緩存全部失效,直接請求數據庫,導致數據庫連接過多,查詢效率變低的問題發生,因此看來魔法值確實應該避免出現在代碼中。

      另外在 《Clean Code》 和 《重構》 等書中也提到了類似的問題,在代碼中出現原始形態數字通常來說是壞現象,應該用命名良好的常量類隱藏它。

      靜態常量取代魔法值

      像下面這個例子:

      if (billCount > 75) {
          //todo
      } else {
          //todo
      }
      

      如果在不了解這塊的業務的同事,在讀到這塊代碼的時候,可能會想,75 是什么鬼,為啥和這個數比較,背后深藏著什么秘密嗎?可能只有當時的開發人員記得了,導致代碼可讀性和可維護性極差。

      如果聲明一個常量,來替換該魔法值,可能就會使代碼的可讀性和可維護性大大增加。

      static final Integer BASIC_BILL_COUNT = 75;
      

      還有些魔法表達式,比如:

      if (value > 60 && value <= 80 && type = 1) {
          // todo
      }
      

      比如這個表達式是表示狀態為正常且項目活躍,就可以定義:

      boolean isActiveProject = value > 60 && value <= 80 && type = 1;
      

      這樣是不是可讀性就提高了,一眼就可以看出來這塊代碼的邏輯。

      枚舉類取代魔法值

      還有一種消除魔法值的方式是使用枚舉類代替,下面讓我們舉個例子:

      if (eventId == 1) {
          System.out.println("睡覺");
      } else if (eventId == 2) {
          System.out.println("吃飯");
      } else if (eventId == 3) {
          System.out.println("打豆豆");
      }
      

      如上代碼是針對事件 id 去執行相應的事件,如果事件比較少,大家還可以勉強記住每個 eventId 對應的含義,但是隨著事件 id 的增多,很可能會發生,新來的員工把事件 id 給搞混了,導致執行錯誤的事件,發生 bug。

      那么我們可以使用枚舉類來表示相應的事件:

      public enum EventEnum {
      
          /**
           * 睡覺
           */
          SLEEP_EVENT(1, "睡覺"),
      
          /**
           * 吃飯
           */
          EAT_EVENT(2, "吃飯"),
      
          /**
           * 打豆豆
           */
          FIGHT_PEA_EVENT(3, "打豆豆");
      
          private int eventId;
          private String desc;
      
          EventEnum(int eventId, String desc) {
              this.eventId = eventId;
              this.desc = desc;
          }
      
          public int getEventId() {
              return eventId;
          }
      
          public String getDesc() {
              return desc;
          }
      }
      

      修改完之后的代碼如下:

      if (eventId == EventEnum.SLEEP_EVENT.getEventId()) {
          System.out.println("睡覺");
      } else if (eventId == EventEnum.EAT_EVENT.getEventId()) {
          System.out.println("吃飯");
      } else if (eventId == EventEnum.FIGHT_PEA_EVENT.getEventId()) {
          System.out.println("打豆豆");
      }
      

      是不是可讀性急劇提升,還不快看看自己代碼中有沒有這樣的魔法值出現,有的話趕緊改造起來。

      還有如果你需要在不同的地點引用同一數值,魔法數會讓你煩惱不已,因為一旦這些數字發生改變,就必須在程序中找到所有的魔法值,并將它們全部修改一遍,這樣就太費時費力了。

      其實不只是 Java 不應該在代碼中使用魔法值,其他語言亦是如此。

      總結

      本文主要介紹了為什么不允許在代碼中出現魔法值以及如何將代碼中已有的魔法值去除掉。

      代碼可讀性還是比較重要的,你肯定不希望別人在接手你的代碼的時候,罵到這數字啥意思,這代碼寫得跟粑粑一樣。

      最好的關系就是互相成就,大家的在看、轉發、留言三連就是我創作的最大動力。

      參考

      《Java開發手冊》泰山版

      posted @ 2020-06-09 13:01  武培軒  閱讀(4357)  評論(7)    收藏  舉報
      主站蜘蛛池模板: 亚洲成人精品综合在线| 亚洲av成人免费在线| 熟女在线视频一区二区三区| 国产成人精品中文字幕| 性色av蜜臀av色欲av| 精品国产亚洲区久久露脸| 精品国偷自产在线视频99| 无码天堂va亚洲va在线va| 天堂…中文在线最新版在线| 国产午夜福利在线视频| 大姚县| 奇米777四色成人影视| 午夜免费无码福利视频麻豆| a级黑人大硬长爽猛出猛进| 日韩有码中文字幕一区二区| 国产精品日日摸夜夜添夜夜添无码| 和艳妇在厨房好爽在线观看| 国产va免费精品观看精品| 中文无码妇乱子伦视频| 北岛玲中文字幕人妻系列| 偷拍专区一区二区三区| 国产亚洲av产精品亚洲| 天天看片视频免费观看| 免费视频欧美无人区码| 商洛市| 国产精成人品日日拍夜夜| A毛片终身免费观看网站| 白嫩少妇激情无码| 真实国产老熟女无套内射| 欧美成人www免费全部网站| 手机看片福利一区二区三区 | 一区二区三区无码免费看| 亚洲中文字幕成人综合网 | 国产无套精品一区二区三区 | 欧美国产日韩在线三区| 无套内谢少妇高清毛片| 日夜啪啪一区二区三区| 秋霞鲁丝片成人无码| 成人区人妻精品一区二蜜臀| 国产一区二区不卡在线| 天啦噜国产精品亚洲精品|