怎么把Java代码写成一道风景?

一、引言

嘻嘻嘻,有没有被标题吸引进来?

当然这里小编所说的“风景”,肯定不是名副其实的风景画,而是所讲在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会自动提示所用到的类、方法等注释。

简单注释包含:单行注释、多行注释,简单注释一般不允许写在代码后方,必须写在代码上方。这是为了避免注释参差不齐,导致代码板式混乱。简单注释一般是写在方法内部的,往往是提供给开发人员看的,通常添加在非常必要的地方,例如复杂的算法、或特殊业务场景。

 

 

文本是小编在日常编写代码一些风格总结,所有观点并不包含对与错。

编写代码是每个程序员日常必做之事,掌握正确代码编写规范是很有必要的,没事做的时候可以优化一下之前所编写的代码,都是可以的。

不知其他小伙伴有没有什么不同的看法,或者在编码中需要注意的地方呢,欢迎留言讨论。

 

发布了152 篇原创文章 · 获赞 422 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/weixin_38111957/article/details/94838806