【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("我是黑色!");}
}

未完待续。。。

相关内容

热门资讯

元旦晚会适合朗诵什么   马上就是元旦晚会了,在晚会上朗诵什么诗歌合适呢?小编在这里为您推荐几首:  第一首:  领:大地...
他在梦里为她采莲爱情诗歌 他在梦里为她采莲爱情诗歌  在屋子里 在他的对面  看到那玻璃隔断里 水池里  有一个女人采莲 也许...
诗歌向来缘浅奈何情深 诗歌向来缘浅奈何情深  一个人,  漫无目的游走在伤感文字里。  时光流逝,岁月如歌。  倘佯在青涩...
春望诗歌鉴赏答案 春望诗歌鉴赏答案  《春望》  唐·杜甫  国破山河在,城春草木深。  感时花溅泪,恨别鸟惊心。  ...
建党100年实现伟大复兴的目... 建党100年后的今天,我们比历史上任何时期都更接近、更有信心和能力实现中华民族伟大复兴的目标。那建党...
夏天的诗歌现代诗歌大全 夏天的诗歌现代诗歌大全【仲夏夜】月亮似刚从银河出浴娇羞的躲在薄薄的云层后面惹得星儿们一片朦胧大地身着...
描写春天的现代诗歌 描写春天的现代诗歌(精选15首)  导语:诗歌是用高度凝练的语言,形象表达作者丰富情感,集中反映社会...
长发绾君心的诗歌 长发绾君心的诗歌  在日常学习、工作抑或是生活中,大家都对那些朗朗上口的诗歌很是熟悉吧,诗歌语言凝练...
曾几诗词全集 曾几诗词全集30首  诗词,是指以古体诗、近体诗和格律词为代表的'中国汉族传统诗歌。亦是汉字文化圈的...
诗经诗歌共有多少篇 诗经诗歌共有多少篇  《诗经》是产生于中国奴隶社会末期的一部诗集。它是中国古代诗歌开端,最早的一部诗...
歌颂党的七绝诗歌 歌颂党的七绝诗歌合集  在学习、工作乃至生活中,大家对诗歌都再熟悉不过了吧,诗歌是按照一定的音节、韵...
赞美家乡的歌词 赞美家乡的歌词  在日常的学习、工作、生活中,说到诗歌,大家肯定都不陌生吧,诗歌能使人们自然而然地受...
舒婷诗歌 舒婷诗歌  在平时的学习、工作或生活中,大家都接触过诗歌吧,诗歌具有语言高度凝练、篇幅短小精悍的特点...
小丑的眼泪诗歌 小丑的眼泪诗歌  流浪在午夜的街头  任刺骨的寒风割着枯瘦的躯体  昏黄的路灯下  细长的影子缩短,...
电影《金陵十三钗》中的插曲《... 电影《金陵十三钗》中的插曲《秦淮景》英语诗歌  在我们平凡的日常里,大家都接触过很多优秀的'诗歌吧,...
爱国诗歌戴望舒《我用残损的手... 爱国诗歌戴望舒《我用残损的手掌》  戴望舒《我用残损的手掌》  我用残损的手掌  摸索这广大的土地:...
我们这一代诗歌 我们这一代诗歌我们这一代诗歌1  我们都一样  一样会坚强  我们都一样  渴望能飞翔  我们都一样...
月亮的诗歌 月亮的诗歌15篇  在学习、工作、生活中,大家总免不了要接触或使用诗歌吧,诗歌是用高度凝练的语言,生...
《春夜喜雨》原文翻译 《春夜喜雨》原文翻译  在学习、工作或生活中,大家都经常接触到诗歌吧,诗歌饱含丰富的感情和想象。你知...
西方浪漫主义诗歌 西方浪漫主义诗歌三首西方浪漫主义诗歌三首1  《致世纪病孩》——雨果  在令人窒息的空气中,如果你 ...