欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

书写简洁规范的代码

程序员文章站 2022-06-15 14:38:56
...

掘金地址:https://juejin.im/post/5971d6436fb9a06bad65659a
《Android高级进阶》读书笔记
写出简洁规范的代码对于开发者而言非常重要,它体现了开发者自己的专业性和技术水平,而且能够赢得别人的赞赏。对团队来说,团队成员遵循统一的代码规范,能够更好地维护代码库的稳定和谐。

Android是基于Java语言进行开发的,因此说到编码规范,首先需要遵循Java的编码规范。

1 Java编码规范

1.1 源代码文件的定义

源代码文件以文件内容中的最顶层的Java类命名,而且大小写敏感,文件扩展名为 .java,同时,文件的编码格式统一为UTF-8。

1.2 源代码文件的结构

一个完整的源代码文件由四部分组成

  • 版权信息或者许可证,例如Android RxJava的版权声明如下:
/**
 - Copyright (c) 2016-present, RxJava Contributors.
 -  - Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in
 - compliance with the License. You may obtain a copy of the License at
 -  - http://www.apache.org/licenses/LICENSE-2.0
 -  - Unless required by applicable law or agreed to in writing, software distributed under the License is
 - distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
 - the License for the specific language governing permissions and limitations under the License.
 */
  • Java文件所在package的声明
  • Java类需要使用到的依赖的引入import语句,一般不建议使用通配符,例如 import android.annotation.*,而应该引入具体的类,例如import android.annotation.SdkConstant; 。同时import语句要按照类型进行分组,不同的组以空行分隔,一般使用的IDE的格式化功能会自动帮我们分好组。
  • Java*类的定义,有且只有一个,但可以存在内部类定义。每个类中的成员需要按照某种逻辑进行排序,维护者也需要按照相同的逻辑去添加新的成员,而不是仅仅将新的成员放到最后面,同时,多个重载方法应该按顺序排放在一起,中间不要插入其他方法。

1.3 遵循的格式

格式主要涉及代码的排版问题,需要重点关注的主要包括:

  • 多使用花括号:例如if,else,for,do,while等语句要和花括号一起使用,即使只有一条语句或者是空的,也要加上花括号,下面的写法是错误的,而且可能会在后面的代码维护中引入bug。
if(isLogin)
    login();
else
    toLogin();

正确的写法要加上花括号:

if(isLogin){
    login();
}else{
    toLogin();
}
  • 列字符个数的限制:根据团队内部使用的显示器以及IDE具体问题具体分析,最终目的是保证代码良好的可阅读性,一般常见的是约定一行80个或者100个字符,超过的部分IDE自动换行。
  • 空白的使用:不要把所有代码都写在一起,需要按照逻辑进行分组,垂直方向的空白原则主要有:a) 方法体内,语句的逻辑分组之间使用空行;b)类里面连续的成员(字段、构造方法、普通方法、嵌套内部类、静态初始化代码块等)之间加上空行。当然,也没有必要加上多个空行,一行就够了。
  • switch语句:switch语句除了要注意缩进,空白的使用之外,如果连续两个case之间明确不需要加break语句时,建议加上// fall through注释,方便代码维护者的理解,同时一定要加上default语句,一个符合规范的switch语句如下。
        switch (input) {
            case 1 :
            case 2 : 
                doOneTwo();
                // fall through
            case 3 :
               doOneTwoThree();
                break;
            default:
                dobigNumber();
        }
  • 修饰符的顺序:类和成员的修饰符如果纯在多个的话,需要按照Java语言规范中的定义排序,语句如下:
public protected private abstract static final transient volatile synchronized native strictfp

1.4 命名约定

类的命名遵循大驼峰命名法UpperCamelCase,而方法名和变量名的命名遵循小驼峰命名法lowerCamelCase。常量名使用大写字母表示,单词之间以下划线分隔,例如static final int CONNECTION_TIMEOUT = 10000

1.5 Javadoc

标准的Javadoc常见的标记和含义如下:

/**
 * Javadoc常见的标记
 * 
 * @param 方法参数的说明
 * @return 对方法返回值的说明
 * @throws 方法抛出异常的藐视
 * @version 模块的版本号
 * @author 模块的作者
 * @see  参考方向
 * @deprecated 标记是否过时
 */

2 Android 命名规范

2.1 布局文件的命名

布局文件的命名规则使用“前缀_逻辑名”的方式,单词全部小写

  • Activity的布局文件 : activity_xxx;
  • Fragment的布局文件:fragment_xxx;
  • 自定义控件的布局文件:view_xxx;
  • 对话框的布局文件:dialog_xxx;
  • 列表项的布局文件:item_xxx;

不过对于庞大项目的开发。近百个activity开头的layout列表还是会眼瞎。所以那种情况会在前面加上模块名。

2.2 资源文件的命名

资源文件的命名规则使用“ 前缀模块名逻辑名称 ”的方式,单词全部小写

  • 按钮的命名以btn作为前缀,例如 btn_login.png,当按钮存在多种形态时,需要加上按钮的形态,例如 btn_login_normal.png,btn_login_pressed.png等
  • 图标的命名以ic作为前缀,例如 ic_share.png
  • 背景图片的命名以bg作为前缀,例如 bg_main.png
  • 分割线的命名以divider作为前缀,例如 divider_gray.png

2.3 类的命名

类的命名遵循Java的类命名规范,也就是使用大驼峰命名法,同时需要根据类的具体用途引入Android相关的命名规则,

  • Activity类需要以Activity作为后缀,例如MainActivity
  • Fragment类需要以Fragment作为后缀,例如HomeFragment
  • Service类需要以Service作为后缀,例如DownloadService
  • BroadcastReceiver类需要以Receiver作为后缀,例如PushReceiver
  • ContentProvider类需要以Provider作为后缀,例如ContactProvider
  • 工具类需要以Util作为后缀,例如NetworkUtil
  • 自定义的公共基础类以Base开头,例如BaseActivity
  • 单元测试的类以Test作为后缀,例如HashTest

2.4变量命名

以m开头。例mAdapter使用时按一个m全都出来了

2.5方法命名

与其写好名字不如写好注释。

3. CheckStyle的使用

CheckStyle是一个针对Java语言的代码规范检查工具,默认情况下,它遵循Google的Java编码规范和Sun的代码规范,同事它又是高度可配置的,不同的团队可以根据自身的情况对检查规范进行裁剪或者新增。

书写简洁规范的代码

安装完成后重启Android Studio

然后配置checkstyle.

书写简洁规范的代码

这里你也可以使用自带的Sun 和Google。

欢迎指正错误和留言