優化前代碼
實例1
動動腦筋:本例代碼中有哪些瑕疵,應該如何優化?
☆代碼1:Before類
- 1 package com.itedu365.best1201;
- 2 public class Before {
- 3 public static void method(int type) {
- 4 // 白色
- 5 if (type = = 10) {
- 6 System.out.println("I am white!");
- 7 // 黑色
- 8 } elseif (type = = 20) {
- 9 System.out.println("I am black!");
- 10 }
- 11 }
- 12 }
現象類別
變量。
現象描述
魔法數字(Magic Number)是指擁有特殊意義,卻又不能明確表現出這種意義的數字。程序里面存在大量這種難以閱讀的數字。
不利影響分析
魔法數字是臭名昭著的劣質代碼現象之一。如果需要在不同的地點引用同一個邏輯數,就會給程序員帶來***的煩惱。一旦這些數發生變化,我們就要在程序中找到所有引用的地方,並將它們全部修改。即使不修改,僅僅是調查分析,要准確指出每個魔法數字所在的位置,也會讓程序員心寒吐血。
檢測工具或方法
(C)Magic Number。
***解決方案
魔法數字的替換手段一般有以下三種:
① 當不是類型碼的時候,考慮使用常量代替--用本例優化技巧04(用常量取代魔法數)。
② 當是有限個數的類型碼時,考慮使用枚舉代替--參照用優化技巧05(用枚舉取代類型碼)。
③ 當是不定個數的類型碼時,考慮使用類代替--參照優化技巧08(用多態代替條件表達式)。
優化技巧04:用常量取代魔法數字
優化類別
優化數據結構。
實施方法
對魔法數字進行優化之前,要分析魔法的特征。如果這個魔法數字不是代表的類型碼時,要用常量來代替。
常量不會造成任何性能開銷,卻可以大大提高代碼的可讀性。
優化后代碼
實例1 優化后
☆代碼2:Consts類
- 1 package com.itedu365.best1202;
- 2 public class Consts {
- 3 public static int COLOR_WHITE_10 = 10;
- 4 public static int COLOR_BLANK_20 = 20;
- 5 }
☆代碼3:After類
- 1 package com.itedu365.best1202;
- 2 public class After {
- 3 public static void method(int type) {
- 4 // 白色
- 5 if (type = = Consts.COLOR_WHITE_10) {
- 6 System.out.println("I am white!");
- 7 // 黑色
- 8 } elseif (type = = Consts.COLOR_BLANK_20) {
- 9 System.out.println("I am black!");
- 10 }
- 11 }
- 12 }
解析:
代碼1中,第5行賦予了臨時變量type數字10,這個10就是魔法數字。一般來說,系統會默認0與1為非魔法數字,其他的都會認為是魔法數字。