☰
整洁的代码,程序员的基本素养
2026/10/9 1:18:36 网站建设 项目流程

前言

前一段时间,我的同事跳槽,入职了一家2000人左右的电商公司(其中研发15人),研发人员主要开发公司的仓储管理平台,项目是21年启动的。而他一个二本毕业的,在研发人员中学历最高。

他吐槽说,有一个同事不是计算机相关专业的,参加了java培训班,现在有4年工作经验,代码写得跟屎一样,并且给我发了一张代码截图。

这段代码大约40行,不工整的地方就有10+,主要存在两个问题:1、运算符两侧不加空格;2、无效的空行。

在我的认知中,编写整洁的代码是一个程序员的基本素养。那么什么样的代码才算是好的代码呢?结合最近买的《代码整洁之道》一书,以及我大学和工作中学到的一些东西,以下是我的一些见解。

1.空格

赋值等号两侧必加空格

// 等号两侧加空格intscore=100;

运算符两侧必加空格

// 算数运算符两侧加空格 + - * / %doubletriangleArea=0.5*a*h// 为了表示运算的优先级,有时乘除不加空格 * /doublediscriminant=b*b-4*a*c;// 关系运算符两个加空格 == != > >= < <=if(score>=60){}// 逻辑运算符两侧加空格 && ||if(student!=null&&student.studentName!=null){}

方法、构造方法的定义及其调用,参数逗号之后空格

Circle(intcenterX,intcenterY,doubleradius){// ...}doublegetArea(doublea,doubleb,doubleh){return0.5*(a+b)*h;}

for循环的分号之后加空格

for(inti=0;i<100;i++){}

2.空行

方法和方法之间加一行空行,属性和属性之间不加空行。

publicclassPoint{privateIntegercenterX;privateIntegercenterY;Point(IntegercenterX,IntegercenterY){this.centerX=centerX;this.centerY=centerY;}publicIntegergetCenterX(){returncenterX;}publicvoidsetCenterX(IntegercenterX){this.centerX=centerX;}publicIntegergetCenterY(){returncenterY;}publicvoidsetCenterY(IntegercenterY){this.centerY=centerY;}}

不合理的空行

// 加空行的目的是为了让代码阅读更清晰,乱加空行导致代码看起来很长,无用行可以删除。while(b==0){System.out.println("分母不可以为0,请重新输入!");b=scanner.nextDouble();}

合理的空行

// 如果在业务中有两件或者多件要处理的事,可以在这之间加个空行,这是可以理解并且合理的publicstaticvoidmain(String[]args){Catcat=newCat("汤姆");cat.eat();cat.run();Dogdog=newDog("旺财");dog.eat();dog.run();}

3.命名

list 命名以 xxxList 结尾
map 命名以 xxxMap 结尾

List<Student>studentList=newArrayList<>();Map<String,Student>studentMap=newHashMap<>();

全大写下划线(HELLO_WORLD):通常用于常量声明
帕斯卡命名法(HelloWorld):通常用于类名
驼峰命名法(helloWorld):类的属性,方法,方法参数,变量

菜鸟教程官网也有马虎的时候 ↓

4.边界

行边界:显示器的大小是有限的,若是一行代码太长,需要拖动滚动条才可以查看行尾的代码,非常不方便,行边界以编译器右侧的竖线为准(一般是120个字符)
一行代码过长可以适度换行

publicStudentgetStudent(StringpkStudent,StringstudentName,StringstudentPhoneNumber,Integersex,IntegerisDelete){// TODO}

行数:同样,代码行数也不宜过长,方法的大小应该尽可能短小。

5.循环

减少循环层数,以减少时间复杂度。
点击查看代码示例

6.无用代码和死代码

未被使用到的包、类、方法、接口、变量等,在编译器中代码颜色会变深色,应该删除

死代码就是永远不会运行的代码,用软件测试的话说,就是路径覆盖永远不会走到的地方,应该删除

publicclassDeadCodeExample{publicstaticvoidmain(String[]args){booleansomeCondition=false;// 下面的if语句中的代码块由于someCondition为false,因此是死代码if(someCondition){System.out.println("这段代码是死代码,因为someCondition为false");// 这里还可以有更多的代码,但都不会被执行}}}

7.if条件和语句放在同一行

有一些人写代码会压行,把if条件和语句写在同一行,这样是不利于代码阅读的,也不利于调试

if(StringUtils.isEmpty(studentName))studentName=String.valueOf(po.getStudentName());

应该为语句加上括号,并且换行。优化:

if(StringUtils.isEmpty(studentName)){studentName=String.valueOf(po.getStudentName());}

8.常见的糟代码及其优化

示例1:布尔值不应该和true或者false相比

publicvoiddemoMethod(booleanisStudent){if(isStudent==true){System.out.println("Student");}}

优化后:

publicvoiddemoMethod(booleanisStudent){if(isStudent){System.out.println("Student");}}

示例2:常量.equals(变量)√,变量.equals(常量)×,

if(name.equals("阿祖")){// TODO}

优化后:

if("阿祖".equals(name)){// TODO}

示例3:即使if后只有一条要执行的语句,也应该加上{}

publicvoiddemoMethod(Stringsex){if("男".equals(sex))System.out.println("我是男生");elseif("女".equals(sex))System.out.println("我是女生");elseSystem.out.println("我是谁?我在哪?")}

优化后:

publicvoiddemoMethod(Stringsex){if("男".equals(sex)){System.out.println("我是男生");}elseif("女".equals(sex)){System.out.println("我是女生");}else{System.out.println("我是谁?我在哪?")}}

循环内只有一条语句也一样加上{}

publicvoiddemoMethod2(){for(inti=1;i<10;i++){for(intj=1;j<=i;j++)System.out.print(j+"*"+i+"="+i*j+"\t");System.out.println();}}

优化后:

publicvoiddemoMethod2(){for(inti=1;i<=9;i++){for(intj=1;j<=i;j++){System.out.print(j+"*"+i+"="+j*i+"\t");}System.out.println();}}

总结

(本文持续更新中。。。)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询