关于什么是好代码,软件行业烂大街的名词一大堆,什么高内聚、低耦合、可复用、可扩展、健壮性等等。也有所谓设计6原则—SOLID:

即Single Responsibility (单一职责),Open Close(开闭),Liskov Substitution(里氏替换),Interface Segregation(接口隔离),Dependency Inversion(依赖反转)等。

不喜欢这些抽象名词,我们搞点简单明了的。一匹跑得快(运行速度快),少生病(健壮),可以驮载各类货物(可扩展),容易辨识(容易看懂),病好治(bug好发现),高大英俊的千里汗血马是也。

什么是好代码,不好定义,但一般包含下面几种情况的代码都不算好代码:

代码重复

整个项目中,存在大量的重复代码。

函数太长

如果太长(一般不宜超过200行,但不绝对),你自己都不太容易读懂,请不要犹豫,拆成小函数吧。笔者刚毕业,参与一个大型复杂的金融软件,核心业务类,函数1000行算小case,5000多行的不在少数,我的内心是哇凉哇凉的,还好大致逻辑比较清晰

类太大

一般不宜操过1000行,同样不绝对,jdk源码过千行的不少嘛。还是那个大型复杂的金融软件,核心的几个Algo C++文件,2万到3万行,我的心在滴血

数据泥团

即很多地方有相同的三四项,两个类中有相同的字段、许多函数签名中有相同的参数。把这些应该捆绑在一起的数据项,弄到一个新的类里吧。这样,函数参数列表会变短不少

函数参数列表太长

工作中有7个参数的函数调用,搞清楚每个参数的业务含意,和顺序有点头晕。尽管可能有默认函数参数,不小心的时候确实范过错误,后面直接引入一个线上bug,紧张

变量名、函数名称、类名、接口等命名含义不清晰

苦命的天朝程序员,还要把中文翻译为英文,我也很头大鸭。函数名能让人望名知义,看名字就知道函数的功能是啥,以至于几乎不需要多少comments最好

通常DAO层函数的命令规范是:操作+对象+通过+啥,如:updateUserById, insertQuarter,delteteUserByName

太多的if else

嵌套最好不要超过 3 层。

在循环里定义大量耗资源的变量

大对象,如果可以放在循环外,被共享,推荐这么搞

try 块代码太长

try块只包住真的可能发生异常的语句,最小原则,同样因为try包起来的代码要有额外开销

不用的资源未及时清理掉,流及时关闭

如IO句柄,数据库连接,网络连接等。不清理掉,后果很严重,你若不信,软件就死给你看

看看下面这个作死的代码,都上热搜了。

循环里字符串的拼接不要用“+”

有改过一个OutOfMemery的bug,字符串拼接用”+“,产生了一百多万的字符串变量。用Visual VM看程序占用内存空间比较多,数量最大的,通常都是String,所以用StringBuilder的append吧。

用Java VisualVM截取的一个dump,如下图:

那么,除了这些,究竟什么样的代码才算好代码。阿里巴巴 Java 开发手册中有详细的说明,并且列举了很多例子。比我总结的好多了,推荐大家平时多阅读阅读。

最后,如果你还没看过阿里巴巴的Java开发手册,那么赶紧看起来吧。如果你没有这个文档,建议加我的微信号“xttblog”,我发给你!

更多推荐

java好的代码_什么样的 Java 代码是好代码?