优化前代码
实例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为非魔法数字,其他的都会认为是魔法数字。