【Java代码与架构之完美优化】篇1:代码质量优化通用准则
创始人
2024-05-30 19:40:18
0

工欲善其事,必先利其器

1. 避免使用空块

常见空块一般有以下几种情况:

  1. 多余的分号:if(xxx);
  2. 多余的大括号:if(xxx){这里没有内容}
  3. 空finall语句:try{...}catch(...){...}finally{这里没有内容}

空块的存在,很容易引起误解。过一段时间,可能程序员自己都不知道这个地方为什么会有这样的代码?是写漏了?还是失误?百思不得其解,是删除还是继续调查需求文档?带来了不必要的麻烦。

为了避免这些问题,不该要的代码都应该及时的删掉。有时候由于设计上的原因,一段临时的代码无法确定其内容,可以通过//TODO定义一个空块标记,等需求确定了再把代码补上。

2. 避免使用空类

空类是除了默认的构造器之外没有其他任何代码。

public class Test{ //这里没有任何代码 }

有些架构中,为了使各层文件齐全,即使类没有被任何代码使用,也会定义一些空类,这样的设计是不好的,不但增加了文本管理成本,并且比空块带来的烦恼更多,因为空块是类内部的影响,而这里是类与类架构之间的影响。

不应该画蛇添足,对于没有价值的类就应该直接删掉

3. 去掉多余的import

类头部存在多种多余的或无用的import

import java.lang.*;

对于没有使用的类,引入后往往会引起误解。而且,不用使用“*”引入包下面所有的类,用到哪个就引入哪个,否则会降低程序的可读性。

为了使代码更加简洁、明了,该引入的一个不能少,不该引入的一个也不能多。对于import java.lang.*;下的包使默认引入的,这是基本常识,因而不需要再次引入了。

4. 删除无效代码

程序中存在未被使用的临时变量、成员变量、方法、参数、类等,也就是说这些是不起任何作用的无效代码。

很多程序员都有一种心态:自己精心写出来的代码,不忍心删除或优化。但是,自己在写程序时无意间留下的代码可能会给后期维护带来更大的成本。

对于这些代码应该直接删掉

5. 制定命名体系规约

在开发中,很多变量名、方法名、类名、包名等杂乱无章,没有规范。

没有命名体系的命名会带来很多问题:

  • 系统理解成本
  • 沟通成本
  • 维护成本
  • 管理成本
  • 极高的系统坏死风险

因此,每一个研发人员,都要提高对命名规范的意识,高层应该制定一套通用编程命名规范和系统的命名标准

6. 去掉重复代码

重复代码即多个类里面包含相同的代码片段或方法。

如果系统里同一个类或不同类中存在很多重复代码,一旦业务需求变更,就不知道该修改哪一处代码,如果忘记了修改任何一处代码都会产生BUG。

因而对于多余的代码,考虑将其和删除,或考虑提取出来作为工具类使用。

7. 保持switch语句完整性

在switch语句中省略break或default都是错误的行为。

不说逻辑上的错误,省略break或default都会导致代码的可读性变差。

备注:
在jdk8之后的版本中推出了新的语法格式,可以省略break。详细可见我的另一篇文章【JDK 17 新特性】jdk8~jdk17新特性

8. 大写“L”代替小写“l”定义long类型变量

long i = 1l;

long类型的变量定义,都需要在后边跟上小写l或大写L,而小写l与数字1十分形似,难以分辨,者大大降低了程序的可读性,因而在定义long类型变量的时候,统一使用大写的L来标识变量。

9. 避免在一条语句中声明或赋值多个变量

//声明多个变量
long long1,long2;
// 赋值多个变量
long2=long1=1;

在一条赋值表达式语句同时声明或赋值多个变量,会大大降低程序的可读性与可测试性。

同时应该保证语句的单一职责

10. 去掉控制标志的临时变量

public String test(int type){// 结果控制标志临时变量resSteing res = "";if(type==1){res = "第一名";}else if(type==2){res = "第二名";}else{res = "第三名";}return res;
}

在传统面向对象的编程语言“单一出口”原则的引导下,哎表达式里,常常会看到有控制结结果的临时变量。

去掉这种临时变量的控制标记会让代码清晰很多。

public String test(int type){if(type==1){return "第一名";}else if(type==2){return "第二名";}else{return "第三名";}
}

11. 避免赋予临时变量过多角色

public static void method(){String temp;// 职责1temp = "This is" + getType();System.out.println(temp);// 职责2temp = "My name is " + getName();System.out.println(temp);
}

单一职责告诉我们,这种临时变量只因该被赋值一次,如果它们被赋值超过一次,就意味着它们在方法中承担了一个以上的职责,这回令代码阅读者疑惑,大大降低程序的可读性。

因而我们应该增加临时变量,使得每个临时变量只代表一个职责。

public static void method(){// 临时变量1String tempType;// 临时变量2String tempName;tempType= "This is" + getType();System.out.println(tempType);tempName= "My name is " + getName();System.out.println(tempName);
}

12. 避免使用魔法数字

public static void method(int type){if(type==10){//魔法数字10System.out.println("我是白色!");}else if(type==20){//魔法数字20System.out.println("我是黑色!");}
}

魔法数字(Magic Number)是臭名昭著的劣质代码现象之一。如果需要在不同的地点引用同一个逻辑数,就会给程序员带来无限的烦恼。一旦这些数字发生变化,维护起来十分麻烦。

魔法数字的替换手段一般有以下三种:

  1. 当不是类型码的时候,考虑使用常量代替。
  2. 当是有限个数的类型码的时候,考虑使用枚举代替。
  3. 当是不定个数的类型码的时候,考虑使用类代替。

用常量代替示例:
声明常量:

public class Consts{public static int COLOR_WHITE = 10;public static int COLOR_BLANK = 20;
}

在定义常量时,为了方便阅读,通常以功能来命名。不建议在常量名后边加上魔法数字,比如COLOR_WHITE_10,这样虽然方便阅读,但是在后期常量值修改的时候,一样需要修改使用你常量的地方,不利于维护。

使用常量代替魔法数字:

public static void method(int type){if(type==Consts.COLOR_WHITE_10){//魔法数字10System.out.println("我是白色!");}else if(type==Consts.COLOR_BLANK_20){//魔法数字20System.out.println("我是黑色!");}
}

未完待续。。。

相关内容

热门资讯

春运安全标语   春运安全标语  1、带一份小心上路,携一团温馨回家。  2、不超速,不超员,不酒后驾驶,不疲劳驾...
大学生实习鉴定评语 大学生实习鉴定评语  一、什么是大学  大学是实施高等教育的学校的一种,包括综合大学和专科大学、学院...
控辍保学的宣传标语 控辍保学的宣传标语  在生活、工作和学习中,许多人都接触过一些比较经典的标语吧,标语肩负着“社教”的...
洗手间标语 洗手间标语  在平平淡淡的学习、工作、生活中,大家总少不了接触一些耳熟能详的标语吧,借助标语可以达到...
交通安全宣传标语口号 交通安全宣传标语口号  交通安全是指人们在道路上进行活动、玩耍时,要按照交通法规的规定,安全地行车、...
安全文明出行的宣传标语 安全文明出行的宣传标语精选  平平安安出门,快快乐乐回家。文明出行,是对自己负责,也是对他人负责。下...
护肤品广告语 护肤品广告语大全(精选310句)  好的广告语就是品牌的眼睛,对于人们理解品牌内涵,建立品牌忠诚都有...
美甲店开业宣传标语 美甲店开业宣传标语  美甲店开张都少不了促销广告,好的广告促销语开业吸引更多的客源到店美甲,那么,什...
旅游横幅标语 旅游横幅标语  在日常的学习、工作、生活中,大家都听说过或者使用过一些比较经典的标语吧,作为一种最经...
队名队呼口号 队名队呼口号大全  在生活、工作和学习中,大家总免不了要接触或使用口号吧,口号既有公文语体准确、简洁...
家长给高中生的评语 家长给高中生的评语(精选105句)  在平时的学习、工作或生活中,大家都不可避免地会接触到评语吧,借...
卫生巾的广告词 有关卫生巾的广告词  篇一:卫生巾广告词  1.苏菲:苏菲弹力贴身  2.苏菲超熟睡系列卫生巾广告词...
太阳镜的英文广告词_英文广告... 太阳镜的英文广告词_英文广告词  在生活、工作和学习中,大家都经常接触到广告词吧,广告词具有简洁凝练...
员工工作绩效评语 员工工作绩效评语120句  在日复一日的学习、工作或生活中,大家总免不了要接触或使用评语吧,评语是指...
最新防火宣传标语 最新防火宣传标语大全  用火防火不失火,为国为家也为我。下面是应届毕业生小编为大家整理的最新防火宣传...
名烟名酒连锁店广告语 名烟名酒连锁店广告语  1、礼送万家,共赢天下。  2、木兰烟酒,唇齿间的.享受。  3、心有一杆称...
高校女生节霸气横幅标语   女生节为女大学生们提供了学习和锻炼的平台。许多大学生认为举行女生节意义深远。以下是关于高校女生节...
洗衣服务广告语 洗衣服务广告语  一、贝特尔洗衣,干净好心情。  二、贝特尔洗衣衣品如洗,称心如衣。  三、贝特尔洗...
酒店创意招聘广告词 酒店创意招聘广告词大全  美好的明天,从今晚长城开始!━━长城宾馆  香格里拉━━您平步青云的必然选...
宣传爱护小草的标语   1、我们是幼苗,我们都需要呵护。  2、小草给我一片绿,我给小草一份爱。  3、拯救地球,一起动...