您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java中的魔法值概念是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java中的魔法值概念是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
使用IDEA時,啟用了阿里的代碼規范檢查,其中就有一項提示是不允許任何魔法值出現在代碼里,于是出于好奇就了解一下到底啥時魔法值。
魔法數值、魔法數字、魔法值,這是一個東西,不同的叫法。
魔法數字,在編程領域指的是莫名其妙出現的數字。數字的意義必須通過詳細閱讀才能推斷出來
if("1".equals(dangerKey)){ BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY)); model.addAttribute("isDanger", true); model.addAttribute("warningValue", warningValue); }
上面代碼中的字符串1就是一個魔法值,在未讀整段代碼之前,我并不知道這個字符串1代表什么意思,只有把這個字符串帶入后面的代碼邏輯才能判斷該值的真實意義,而且如果多次出現,這就大大的降低了代碼的可閱讀性。所以我們在代碼中應該極力避免產生魔法值。
** 使用枚舉類型或者使用static final修飾常量 **
//預警值標識 public static final String DANGERKEY_TRUE ="1"; if(DANGERKEY_TRUE.equals(dangerKey)){ BigDecimal warningValue = new BigDecimal(JedisUtils.get(WARNING_VALUE_KEY)); model.addAttribute("isDanger", true); model.addAttribute("warningValue", warningValue); }
以上就是使用static final的方式替換的魔法值,這樣就可以避免了。如果在代碼中多次使用的話,只需更聲明的地方就可以達到全局的效果。
提示:靜態常量的命名最好全是大寫字母,如果是多個單詞需要分割,可以使用下劃線分割。
小結:魔法值的問題對于代碼邏輯來說,并不是什么要命的事情,即使不修改也基本不影響代碼的正常運行,我以前沒有安裝阿里代碼檢查規范時,一樣這么使用,也沒出現過啥問題。好吧,應該說但是了。但是,遵循公認的代碼規范,可以有效的避免開發過程的一些小問題(最讓人頭疼的往往都是一些小問題引起的),提升開發的效率和代碼的可閱讀性,老老實實按照規范來,自然就會受益良多,繼續加油!
想象一下,當你入職一家新公司,打開工具看以前同事的項目時,突然看到下面這段代碼
String[] catNames = new String[7]; String[] dogNames = new String[7]; for(int i = 0; i < 7; i++) { //此處省略若干行 }
你心中一定很凌亂,可能還會在心底默默問候下寫這段代碼的前同事。
在沒有注釋的情況下,此處的i < 7,你根本無法知道是要處理 dogNames數組還是catNames數組,你還要繼續去看循環體中的內容才能來推斷這個數字的含義。這里的7就是魔法值。
所謂的魔法值,就是指在代碼中直接出現的數值,只有在這個數值記述的那部分代碼中才能明確了解其含義。
魔法值簡單好用,任何項目基本上都會有魔法值的出現。但魔法值就像一段沒有注釋的代碼,它的出現使得程序的可讀性大大下降,甚至只有當事人才知道。這對于項目或者別的開發來說,無疑都是不利的。同時,如果到處用到魔法值,那需要修改的時候,就要修改很多地方,這不僅耗費時間,還很容易會遺漏。
魔法值的問題就是含義不明且無法統一使用,要把它們統一表示,并加上注釋,我們可以用static final 定義常量或使用enum值。
static final int CAT_NUM = 7; String[] catNames = new String[CAT_NUM]; for(int i = 0; i < CAT_NUM; i++) { //此處省略若干行 } for(int i = 0; i < PET.DOG.getNum(); i++) { //此處省略若干行 }
當然此處用catNames.length,dogNames.length也不會引起混淆。
其實魔法值也并不是要完全禁止不用,畢竟每次用到數值就要去定義常量或者在enum中新增元素還是很麻煩的。只要保障你的數值不會讓別人難以閱讀,你就可以使用魔法值。一般 -1、0 和 1不被視為魔法值。
讀到這里,這篇“Java中的魔法值概念是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。