七、书写简洁规范的代码

代码可以说是开发者的脸面,写出简洁规范的代码对个人,对团队都是非诚重要的。对个人而言,简洁规范的代码不仅体现自己的专业和技术水平,而且能够赢的别人的赞赏;对于团队而言,团队成员遵循统一的规范,能够更好地维护代码库的稳定和谐。
Android 是基于Java语言进行开发的,因此说到编码规范,收下件需要遵循Java的编码规范,比较有名的Java编码规范有Google的Java编码规范和Oracle的Java编码规范。一份完整的编码规范不仅仅管住编码格式是否每股前,同时也会讨论一些约定和编码标准。

A、Java 编码规范

(1)源代码文件的定义

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

(2)源码文件的结构

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

a、版权信息或者许可证

例如 Android Framework (PhoneWindow类)的版权声明

/*

 * Copyright (C) 2006 The Android Open Source Project

 *

 * 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.

 */

b、Java文件所在的package声明

例如:package android.net.

c、Java类需要使用到的依赖引入import 语句

注:一般不建议使用通配符“*”,而应该引入具体类,同时import 语句要按照类型进行分组,不同的组以空行分隔,第三方函数库引入类也独立成组等。一般使用IDE的格式化功能会自动帮我们分好组。
Android studio 的代码格式化快捷键win:ctrl+alt+l mac:OPTION+CMD+l

package com.explem.chaohaozhao.myviewpager.utils;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.os.Build;

import com.explem.chaohaozhao.myviewpager.R;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

d、Java 顶级类的定义

Java 顶级类的定义有且只有一个,但可以存在内部类定义。每个类中的成员需要按照某种逻辑进行排序,维护者也需要按照相同的逻辑去添加新的成员,而不是仅仅将新的成员放到最后面,同时,多个重载方法应该按照顺序排放在一起,中间不要插入其它方法。

(3)遵循的格式

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

a、多使用花括号

例如 if、else、for、do、while等语句要和花括号一起使用,即使只有一条语句或者是空的,也要加上花括号:
错误的方式,而且可能会在后面的代码维护中引入bug

if (isClick)
  but.setText("ddddd");
else
  but.setText("ttt");

正确的写法要加上花括号

if (isClick){
   but.setText("dddd");
}else{
   but.setText("ttt");
}

b、列字符个数的限制

根据团队内部使用的显示器以及IDE具体问题具体分析,最终目的是保证代码良好的可阅读性,一般常见的是约定一行80个或100个字符,超过部分IDE自动换行。

c、空白的使用

不要把所有的代码都写在一起,需要按照逻辑进行分组,垂直方向的空白原则主要有:
(1)方法体内,语句的逻辑分组之间使用空行;
(2)类里面连续的成员(字段、构造方法、普通方法、嵌套内部类、静态初始化代码块等)之间加上空行。当然,也没必要加上多个空行,一个就够了。

d、switch语句(kotlin里when代替switch)

Switch语句除了要注意缩进,空白使用之外,如果连续case 之间明确不需要家break时,建议加上//fall through 注释,方便代码维护者的理解,同时一定要加上default 语句,例子如下:

switch(count){
   case 1:
       break;
   case 3:
    //fall through
      default:
        break;
}

e、修饰符的顺序

public(公有的) protected(受保护的) private(私有的) abstract(抽象) static(静态变量) final (修饰)transient(不参与序列化) volatile(同步机制) synchronized() native() strictfp(精确浮点)

QQ图片20181011153716.png
QQ图片20181011153843.png

(4)命名约定

类的命名约定遵循大驼峰命名法:JavaBean,而方法名和变量名的命名遵循小驼峰命名规则法:startPlay.常量名使用大写字母表示,单词之间以下划线分隔,例:public static final int CONNECTION_TIMEOUT = 1000;


QQ图片20181011154008.png

(5)Javadoc(文档注释)

增加 方便代码可读性


QQ图片20181011154107.png

B、Android 命名规范

(1)布局文件的命名

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


QQ图片20181011154210.png

(2)资源文件的命名

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

QQ图片20181011154307.png

(3)类的命名

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


QQ图片20181011154402.png

C、CheckStyle(编码规范检查插件)

在Android Studio 中,我们可以引入CheckStyle 插件来进行编码规范检查,每个团队根据自身的编码格式按定制CheckStyle的规则,然后可以加入到持续构建平台中,定期扫描提交代码是否符合规范,并给出报告。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容