一、引言
嘻嘻嘻,有没有被标题吸引进来?
当然这里小编所说的“风景”,肯定不是名副其实的风景画,而是所讲在Java中如何更好的去编写代码,从而给代码读者放佛在看一副风景画的感觉。
这里风景的概念,是因为小编经常写完一段代码,会盯着自己写的代码看上几分钟,就感觉很好看 ???
从公司的角度出发,每个公司都有自己的代码编写规范文档,甚至有些公司如果变量名不规范都需要扣工资的。从自身的角度出发,如果自己所写的代码能够给读者看起来很舒服,并且逻辑思路表示清晰,也能够快速获得别人的肯定。
小编认为掌握并且习惯一套很良好的代码编写规范是很有必要的,小编结合本身实际,也参考了阿里巴巴所出品的Java开发手册,两者结合进行一些代码规范的总结。
快来看看本文编码风格和自己的编码风格又有什么区别呢?
二、命名规范
代码的元素总的来说包括类、变量、方法、参数、常量等程序中所需要的元素。一个的好的命名规范,能快速体现该元素的特征、责任,仅从名字上即可知道代码元素的属性是什么。
面向对象代码元素命名分为两大类:
UpperCamelCase 首字母大写,俗称大驼峰,例如:Object、StringBuffer、FileInputStream等。
lowerCamelCase 首字母小写,俗称小驼峰,例如:Object的wait()、StringBuffer的append(String)等。
由上可见类名采用大驼峰形式,类中的方法、参数、成员变量局部变量等一般采用小驼峰形式。但是在类中,常量的写法都是采用大写字母,单词之间采用下划线划分。
清楚命名规则之后,还需要最好望文知义。望文知义实在不需要额外的解释之下,仅从名称就能够理解该元素确切含义。尤其在初步学习的时候,就需要养成良好的习惯。在刚开始学习之时,一般喜欢采用简单的a、b、c来命名,而且也不注重编写格式。
举个例子,whatareyoudoingnow,对于小编这种英语不好的,看到还不能快速反应过来,如果编写规范一点我们再来看下,What are you doing now? 英语句式单词首字母大写,单词之间间隙,句末的标点符号,扫一眼就清楚想要表达的意思,java代码也是如此。
除以上以外,推荐在Java命名时,以下列的方式体现元素特征:
1、创建包名统一采用小写的形式
2、抽象类命名使用Abstract开头、异常类命名使用Exception结尾、测试类使用要测试的类名开始,Test结尾。
3、枚举类名带上Enum后缀,枚举成员名称需要全大写,单词间使用下划线隔开。
三、代码展示风格
基本代码编写风格
掌握如何正确的命名之后,代码的编写风格也是更加重要的,缩进、空格、空行造就类代码的层次性和规律性,有助于直观、快速、准确的理解业务逻辑。
table=newTab;
if(oldTab!=null){
for (int j=0;i<oldCap;++j){ if((e=oldTab[j])!=null){
oldTab[j]=null;
if(e.next==null){newTab[e.hash&(newCap-1)]=e;
}else if(e instanceof TreeNode){if(loTail==null){loHead=e;
// 其他代码省略
以上代码小编就不多说了,相信没几个程序员愿意去看这种风格的代码,来看下正确的例子。
/**
* @Auther: IT贱男
* @Date: 2019/7/7 16:52
* @Description: 代码风格展示
*/
public class SpaceCodeStyle {
// = 等式左右两边注意空格
private static Integer one = 1;
private static Long tow = 2L;
private static Float three = 3F;
private static StringBuilder sb = new StringBuilder("code style");
// 缩进4个空格,IDEA编辑器默认缩进4个空格
// 为啥要空格呀?直接Tab键不就好了吗?
// 在这里绝大推荐的是使用空格缩进,因为由于不同的编辑器对Tab对解析是不一致的,因此视觉效果体验会有所差异
// 而空格之间都是兼容的
public static void main(String[] args) {
try {
// 任何二目运算符的左右必须有一个空格
int count = 0;
// 三目运算符的左右两边都需要有一个空格
boolean condition = (count == 0) ? true : false;
// 关键词if所对应的()左右两边都需要空格
// 左大括号后必须换行
if (condition) {
System.out.println("world");
// else 前后需要加上空格
} else {
System.out.println("ok");
// 最后结束的大括号必须换行
}
// 如果大括号内为空,则简洁写成{}即可。
} catch (Exception e) {}
// 每个实参逗号之后必须要有一个空格
String result = getString(one, tow, three, sb);
System.out.println(result);
}
/**
* 方法之间通过空行来隔开,每个形参之后必须有一个空格
* @param one
* @param two
* @param three
* @param sb
* @return
*/
private static String getString(Integer one, Long two, Float three, StringBuilder sb) {
// 任何二目运算符的左右两边必须有一个空格,包括赋值运算符,加号运算符。
Float temp = one + two + three;
sb.append(temp);
return sb.toString();
}
}
换行与高度
以上是编写代码时细节操作,但编写代码时不仅仅要注意代码细节,也要照顾代码整体阅读的感观。
换行:代码中需要限定每个的字符个数,对于无节制的行数字符,需要不断拉去左右滚动条或者键盘光标来阅读。因此单行字符数量不超过120个,超出则需要换行。
那怎么合理的换行呢?
1、第二行相对第一行缩进4个空格,从三行也要保持相同缩进,参考以下代码。
2、运算符、方法调用的点符号与下文一起换行。
3、方法调用中的多个参数需要换行时,在逗号后换行。
4、在括号前不要换行。
StringBuilder sb1 = new StringBuilder();
// 超过120个字符的情况下,换行缩进4个空格,并且方法前的符号一起换行
sb.append("one").append("two")...
.append("three")...
.append("four");
高度:所谓高度,也就是在一个类中,方法中代码的行数。不知道各位小伙伴见过一个方法,里面有上百行代码,甚至上千代码。高内聚,低耦合是程序员最熟悉的口号,在我们编写代码的时候,要注重模块化。把相关的功能强内聚,把弱相关的功能拆解开来,重新抽象、封装。
在日常开发过程中,约定单个方法的总行数不超过80行,除掉注释、方法签名、大括号、空行等等任何不可见的字符的总行数不超过80行。80行代码一般在显示器上是两屏半的代码量,而三屏是人类短记忆的极限。当然每个公司都有一套强制代码的风格,也有些是大家的代码素质习惯所养成的。
控制语句
java中判断主要有if、switch、三目运算符组成,循环严格意义上也是判断条件的一种,主要有for、while、do-while组成。
那么在这些控制语句下也要注意相对应的编写风格。
在if、else 、for、while等语句中必须使用大括号,即使只有一行代码也需要加上大括号。
在条件表达式中不允许有赋值操作,也不允许在判断表达式中出现复杂的逻辑组合,看以下案例:
// 例如这种表达式使用了复杂的逻辑判断,不便于理解
if (file.open(fileName, "w") && (...) || !(...)) {
...
}
// 针对复杂的逻辑判断可以赋值给布尔类型的变量,便于阅读代码
final boolean isTrue = file.open(fileName, "w") && (...) || !(...));
if (isTrue) {
...
}
最后要注意的是在多层嵌套时不能超过3层,多层嵌套其实是很影响代码的可读性,如果非得使用多层嵌套逻辑,可以使用状态设计模式,比如卫语句、策略模式、状态模式等等来实现。
四、代码注释
编写代码,注释肯定是不能够少的。注释一个看起来很简单,容易被忽视,但是作用又不能小觑的话题。好的注释能够准确反馈设计思想和代码逻辑,能够正确描述业务含义,是其他的工程师能够迅速掌握了解。
java中注释分为两种:一种是javadoc规范,一种是简单注释。
类、类属性和类方法的注释必须遵循javadoc规范,按照javadoc规范编写的注释,可以生产规范的javaAPI文档,而且在使用IDE工具编码时,IDE会自动提示所用到的类、方法等注释。
简单注释包含:单行注释、多行注释,简单注释一般不允许写在代码后方,必须写在代码上方。这是为了避免注释参差不齐,导致代码板式混乱。简单注释一般是写在方法内部的,往往是提供给开发人员看的,通常添加在非常必要的地方,例如复杂的算法、或特殊业务场景。
文本是小编在日常编写代码一些风格总结,所有观点并不包含对与错。
编写代码是每个程序员日常必做之事,掌握正确代码编写规范是很有必要的,没事做的时候可以优化一下之前所编写的代码,都是可以的。
不知其他小伙伴有没有什么不同的看法,或者在编码中需要注意的地方呢,欢迎留言讨论。