代码规范中的Check-Style规范的通俗理解。

来源:互联网 发布:德国香肠 知乎 编辑:程序博客网 时间:2024/06/05 05:55
在日常的开发过程中,都是一个开发团队进行一个项目的开发以及日后的维护,但是需要面对的一个问题就是,团队中的成员的编程水平不同,甚至有可能在立项进组之前习惯使用的编程语言都不一样,所以会导致在项目的开发过程中,编译和运行没有任何问题,但是在正式上线之后或者在需求更改之后,日后的维护人员看不懂或者找不到更或者说很难理解代码的所在的位置,这段代码实现的功能逻辑,或者看不懂这段代码。因为日后的维护人员不可能一直是在项目初始阶段就一直参与的人。而且每个人的编码风格都是不同的,就好像每个人的性格一样。
有的人风格洒脱放荡不羁,就喜欢把{ }上下对齐。
有的人温文尔雅,一个方法体中的代码不超过50行,方法中的调用的其他方法全部都另外创建一个类去书写。
有的人静中带动,从不创建多余的本地变量,能return回去就return回去一串代码。

所以就导致了日后的维护人员对于项目维护时候的上手的复杂程度,所以在这种条件下催生了项目文档,但是项目文档只是告诉了你哪个方法的意义是什么,具体是怎么实现的还是要深入到代码中去尝试。于是在2017年年初的时候阿里巴巴发布了Java开发手册。里面对于开发中经常用到的,大部分新手或者已经形成了不良编码习惯的老手犯的一些错误进行了归纳整理,同时给出了强制,推荐并且给出了相应的反例。没有规矩不成方圆,但是仍有的开发人员看完了之后还是会犯相同的错误,因为口头上或者书面化的约束阻挡不了个人的习惯。

所以可以使用CheckStyle插件,一种强制使开发人员遵守某些编码规范的工具。

本文暂不说明如何配置Check-Style,因为一般在开发立项的时候都会做好Check-Style的配置。

本文主要说明在Check-Style中的大部分规范的所代表的规范的意义。

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"><!--refer to http://checkstyle.sourceforge.net/availablechecks.html--><!-- check-style是用来配置代码规范的xml文件 --><!-- Time=2017.6.29 Author=l1ub0w3n 配置中文注释 --><!-- Checker是Root Module节点 --><module name="Checker"><!-- TreeWalker是子Module节点,被Checker包括 -->    <module name="TreeWalker">        <!-- 检查左侧大括号的规范 -->        <module name="LeftCurly"/>        <!-- 检测右侧大括号的规范 -->        <module name="RightCurly"/>        <!-- 不允许出现空语句的规范 -->        <module name="EmptyStatement"/>        <!-- 每个类都实现了equals()和hashcode()方法的规范 -->        <module name="EqualsHashCode"/>        <!-- 字符串值必须要在equals()方法的左侧的规范 -->        <module name="EqualsAvoidNull"/>        <!-- 可执行语句的数量的数量显示[最大值为40]的规范 -->        <module name="ExecutableStatementCount">            <property name="max" value="40"/>        </module>        <!-- 匿名内部类的长度[最大值为15]的规范 -->        <module name="AnonInnerLength">            <property name="max" value="15"/>        </module>        <!-- 方法的长度限制[最大值为50行]的规范 -->        <module name="MethodLength">            <property name="countEmpty" value="false"/>            <property name="max" value="50"/>        </module>        <!-- 检查未被使用的导入语句的规范 -->        <module name="UnusedImports"/>        <!-- 检查导入后未被使用的包[多余导入]的规范 -->        <module name="RedundantImport"/>        <!-- 检查接口是否只定义了变量而未定义方法的规范 -->        <module name="InterfaceIsType"/>        <!-- 检查修饰符的顺序的规范 -->        <module name="ModifierOrder"/>        <!-- 检查每行是否只有一条语句的规范 -->        <module name="OneStatementPerLine"/>        <!-- 检查运算符是否在应在同一行的规范 -->        <module name="OperatorWrap"/>        <!-- 命名规范[头] -->                <!-- 包名规范 -->        <module name="PackageName">            <property name="format" value="^[a-z][a-z0-9\.]*$"/>        </module><!-- 类名规范 -->        <module name="TypeName">            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>        </module><!-- 变量名规范 -->        <module name="MemberName">            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>        </module><!-- 方法名规范 -->        <module name="MethodName">            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>        </module><!-- 方法的参数名规范 -->        <module name="ParameterName">            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>        </module><!-- 常量名规范 -->        <module name="ConstantName"/><!-- 静态变量名规范 -->        <module name="StaticVariableName"/><!-- 局部变量名规范 -->        <module name="LocalVariableName"/><!-- 类的参数名称规范 -->        <module name="ClassTypeParameterName"/><!-- 方法参数名称规范 -->        <module name="MethodTypeParameterName"/>        <!-- 命名规范[尾] -->        <!-- 参数的个数数量规范[最大值为5] -->        <module name="ParameterNumber">            <property name="max" value="5"/>        </module><!-- 缩进规范 -->        <module name="Indentation"/>        <!-- 检查在Token之前是否有空格规范 -->        <module name="NoWhitespaceBefore">            <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>            <property name="allowLineBreaks" value="true"/>        </module>        <!-- 检查在Token之后是否有空格 -->        <module name="NoWhitespaceAfter">            <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS, UNARY_PLUS"/>        </module>        <!-- 检查Token的周围是否有空格规范 -->        <module name="WhitespaceAround">            <property name="tokens"                      value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, EQUAL, GE, GT, LAND, LCURLY, LE, LITERAL_ASSERT, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, SL, SLIST, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN, TYPE_EXTENSION_AND"/>        </module>        <!-- 分隔符后的空白规范 -->        <module name="WhitespaceAfter"/>        <!-- 检查&周围的空白规范 -->        <module name="GenericWhitespace"/>        <!-- 检查方法签名之前的空白规范 -->        <module name="MethodParamPad"/>        <!-- 检查是否有使用了但是不需要的()的规范 -->        <module name="UnnecessaryParentheses"/>        <!-- 检查是否有未注释的Main方法的规范 -->        <module name="UncommentedMain"/>        <!-- 检查是否有过于复杂的Boolean表达式的规范 -->        <module name="SimplifyBooleanExpression"/>        <!-- 检查是否有过于复杂的Boolean返回代码段的规范 -->        <module name="SimplifyBooleanReturn"/>        <!-- 限制For循环最多嵌套层数的规范[默认为1层] -->        <module name="NestedForDepth"/>        <!-- 限制If判断最多嵌套层数的规范[默认为1层] -->        <module name="NestedIfDepth"/>        <!-- 限制Try Catch异常处理数量嵌套层数的规范[最多为0层] -->        <module name="NestedTryDepth">            <property name="max" value="0"/>        </module>        <!-- 同一行不能有多个声明的规范 -->        <module name="MultipleVariableDeclarations"/>        <!-- 检测Switch是否有default的停止句的规范 -->        <module name="MissingSwitchDefault"/>    </module>    <!-- 文件的长度不超过600行 -->    <module name="FileLength">        <property name="max" value="600"/>    </module>    <!-- 检测文件是否包含制表符的规范 -->    <module name="FileTabCharacter"/></module>

原创粉丝点击