命名的长度应该以能准确达意为目标,尽量使用短的命名方式,但是在足够表达其含义的情况下,长的命名也是可以接受的。 在代码列长度有限制的情况下,短的命名会影响代码可读性,因此,命名的长度应该适当。 此外,作用域小的变量,可以使用相对较短的命名,比如一些函数内的临时变量。相反,对于类名这种作用域比较大的,更推荐使用长的命名方式。
在使用类或函数的过程中,可以利用上下文来简化命名。例如,在User类中,可以直接命名成name、password、avatarUrl,而不需要在成员变量的命名中重复添加“user”这样一个前缀单词。这样可以让命名更短,更容易阅读理解。
命名要可读、可搜索,不要使用生僻的、不好读的英文单词来命名。同时,命名要符合项目的统一规范,不要用些反直觉的命名。 比如,键入某个对象 .get ,希望IDE返回对象所有get方法开头的方法。
对于接口的命名,一般有两种比较常见的方式。一种是加前缀“I”,表示一个 Interface。比如 IUserService,对应的实现类命名为 UserService。另一种是不加前缀,比如 UserService,对应的实现类加后缀“Impl”,比如 UserServiceImpl。对于抽象类的命名,也有两种方式。一种是带上前缀“Abstract”,比如 AbstractConfiguration。另一种是不带前缀“Abstract”。
实际上,对于接口和抽象类,选择哪种命名方式都是可以的,只要项目里能够统一就行。
写好注释可以提高代码的可读性,让代码更加清晰易懂,同时也可以提高代码的可维护性,避免后期维护成本高。此外,写好注释也可以让程序员更加注重代码的可读性,从而提高代码质量。
注释该怎么写
注释的目的是让代码更容易看懂,可以写清楚“做什么、为什么、怎么做”。对于一些复杂的类和接口,可以写明“如何用”。注释本身有一定的维护成本,所以并非越多越好。类和函数一定要写注释,而且要写得尽可能全面、详细,而函数内部的注释要相对少一些,一般都是靠好的命名、提炼函数、解释性变量、总结性注释来提高代码可读性。
注释太多和太少都有问题。太多,有可能意味着代码写得不够可读,需要写很多注释来补充。除此之外,注释太多也会对代码本身的阅读起到干扰。而且,后期的维护成本也比较高,有时候代码改了,注释忘了同步修改,就会让代码阅读者更加迷惑。因此,注释应该适量,尽可能全面、详细,而函数内部的注释要相对少一些,一般都是靠好的命名、提炼函数、解释性变量、总结性注释来提高代码的可读性。
类或函数的代码行数不能太多,但也不能太少。一个类或函数的代码行数最大限制为一屏幕的垂直高度,即不要超过一个显示屏的垂直高度。 只用到一个小功能要引入整个类(类中包含很多无关此功能实现的函数)的时候,这就说明类的行数过多了。
一行代码最长不能超过 IDE 显示的宽度。需要滚动鼠标才能查看一行的全部代码,显然不利于代码的阅读。因此,一行代码的长度应该尽量控制在 IDE 显示的宽度范围内。
善用空行分割单元块是一种编程规范,可以让逻辑更加清晰,特别是在类的成员变量与函数之间、静态成员变量与普通成员变量之间、各函数之间、甚至各成员变量之间,都可以通过添加空行的方式,让这些不同模块的代码之间,界限更加明确。在类的成员变量与函数之间、静态成员变量与普通成员变量之间、各函数之间、甚至各成员变量之间,都可以通过添加空行的方式,让这些不同模块的代码之间,界限更加明确。
我个人比较推荐使用两格缩进,这样可以节省空间,特别是在代码嵌套层次比较深的情况下。除此之外,值得强调的是,不管是用两格缩进还是四格缩进,一定不要用 tab 键缩进。因为在不同的 IDE 下,tab 键的显示宽度不同,有的显示为四格缩进,有的显示为两格缩进。
我个人推荐将大括号放到跟上一条语句同一行的风格,这样可以节省代码行数。但是,将大括号另起一行也有它的优势,那就是左右括号可以垂直对齐,哪些代码属于哪一个代码块,更加一目了然。因此,大括号是否要另起一行,只要团队统一、业内统一、跟开源项目看齐就好了,没有绝对的优劣之分。
在 Java 类文件中,先要书写类所属的包名,然后再罗列 import 引入的依赖类。在 Google 编码规范中,依赖类按照字母序从小到大排列。在类中,成员变量排在函数的前面。成员变量之间或函数之间,都是按照“先静态(静态函数或静态成员变量)、后普通(非静态函数或非静态成员变量)”的方式来排列的。除此之外,成员变量之间或函数之间,还会按照作用域范围从大到小的顺序来排列,先写 public 成员变量或函数,然后是 protected 的,最后是 private 的。不同的编程语言中,类内部成员的排列顺序可能会有比较大的差别。
大部分人阅读代码的习惯都是,先看整体再看细节。所以,我们要有模块化和抽象思维,善于将大块的复杂逻辑提炼成类或者函数,屏蔽掉细节,让阅读代码的人不至于迷失在细节中,这样能极大地提高代码的可读性。不过,只有代码逻辑比较复杂的时候,我们其实才建议提炼类或者函数。毕竟如果提炼出的函数只包含两三行代码,在阅读代码的时候,还得跳过去看一下,这样反倒增加了阅读成本。
可以考虑函数是否职责单一,是否能通过拆分成多个函数的方式来减少参数。同时,建议参数不超过3、4个,超过5个的时候需要考虑是否可以拆分成多个函数。
不要在函数中使用布尔类型的标识参数来控制内部逻辑,这明显违背了单一职责原则和接口隔离原则。建议将其拆成两个函数,可读性上也要更好。
函数设计要职责单一,即要求函数的职责要尽可能单一,不要过于复杂,以提高代码的可读性和可维护性。具体的代码示例可以参考已知信息中的示例代码。
移除过深的嵌套层次是为了避免代码嵌套层次过深,导致代码整洁性差、理解难度大。建议最多不超过两层嵌套,超过两层之后要思考是否可以减少嵌套。解决方法包括去掉多余的if或else语句、使用编程语言提供的continue、break、return关键字提前退出嵌套等。