代碼可以說是開發(fā)者的臉面剥险,寫出簡潔規(guī)范的代碼對個人聪蘸,對團隊都是非誠重要的。對個人而言炒嘲,簡潔規(guī)范的代碼不僅體現(xiàn)自己的專業(yè)和技術(shù)水平宇姚,而且能夠贏的別人的贊賞;對于團隊而言夫凸,團隊成員遵循統(tǒng)一的規(guī)范浑劳,能夠更好地維護代碼庫的穩(wěn)定和諧。
Android 是基于Java語言進行開發(fā)的夭拌,因此說到編碼規(guī)范魔熏,收下件需要遵循Java的編碼規(guī)范,比較有名的Java編碼規(guī)范有Google的Java編碼規(guī)范和Oracle的Java編碼規(guī)范鸽扁。一份完整的編碼規(guī)范不僅僅管住編碼格式是否每股前蒜绽,同時也會討論一些約定和編碼標準。
A桶现、Java 編碼規(guī)范
(1)源代碼文件的定義
源代碼文件以文件內(nèi)容中的最頂層的Java類命名躲雅,而且大小寫敏感,文件擴展名為.java,文件編碼格式統(tǒng)一為UTF-8.
(2)源碼文件的結(jié)構(gòu)
一個完整的源代碼文件由四部分組成
a骡和、版權(quán)信息或者許可證
例如 Android Framework (PhoneWindow類)的版權(quán)聲明
/*
* 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 語句要按照類型進行分組,不同的組以空行分隔婆赠,第三方函數(shù)庫引入類也獨立成組等绵脯。一般使用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 頂級類的定義有且只有一個蛆挫,但可以存在內(nèi)部類定義赃承。每個類中的成員需要按照某種邏輯進行排序,維護者也需要按照相同的邏輯去添加新的成員璃吧,而不是僅僅將新的成員放到最后面楣导,同時,多個重載方法應該按照順序排放在一起畜挨,中間不要插入其它方法筒繁。
(3)遵循的格式
格式主要涉及代碼的排版問題,需要重點關(guān)注的主要包括巴元。
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睬愤、列字符個數(shù)的限制
根據(jù)團隊內(nèi)部使用的顯示器以及IDE具體問題具體分析片仿,最終目的是保證代碼良好的可閱讀性,一般常見的是約定一行80個或100個字符尤辱,超過部分IDE自動換行砂豌。
c、空白的使用
不要把所有的代碼都寫在一起光督,需要按照邏輯進行分組阳距,垂直方向的空白原則主要有:
(1)方法體內(nèi),語句的邏輯分組之間使用空行结借;
(2)類里面連續(xù)的成員(字段筐摘、構(gòu)造方法、普通方法船老、嵌套內(nèi)部類咖熟、靜態(tài)初始化代碼塊等)之間加上空行。當然努隙,也沒必要加上多個空行球恤,一個就夠了辜昵。
d荸镊、switch語句(kotlin里when代替switch)
Switch語句除了要注意縮進,空白使用之外,如果連續(xù)case 之間明確不需要家break時躬存,建議加上//fall through 注釋张惹,方便代碼維護者的理解,同時一定要加上default 語句岭洲,例子如下:
switch(count){
case 1:
break;
case 3:
//fall through
default:
break;
}
e宛逗、修飾符的順序
public(公有的) protected(受保護的) private(私有的) abstract(抽象) static(靜態(tài)變量) final (修飾)transient(不參與序列化) volatile(同步機制) synchronized() native() strictfp(精確浮點)
(4)命名約定
類的命名約定遵循大駝峰命名法:JavaBean,而方法名和變量名的命名遵循小駝峰命名規(guī)則法:startPlay.常量名使用大寫字母表示,單詞之間以下劃線分隔盾剩,例:public static final int CONNECTION_TIMEOUT = 1000;
(5)Javadoc(文檔注釋)
增加 方便代碼可讀性
B雷激、Android 命名規(guī)范
(1)布局文件的命名
布局文件的命名規(guī)則使用“前綴_邏輯名”的方式,全部小寫
(2)資源文件的命名
資源文件的命名規(guī)則使用 前綴模塊名邏輯名稱的方式告私,單詞全部小寫
(3)類的命名
類的命名遵循Java 的類命名規(guī)范屎暇,也就是使用大駝峰命名法,同時需要根據(jù)類的具體用途引入Android 相關(guān)的命名規(guī)則:
C驻粟、CheckStyle(編碼規(guī)范檢查插件)
在Android Studio 中根悼,我們可以引入CheckStyle 插件來進行編碼規(guī)范檢查,每個團隊根據(jù)自身的編碼格式按定制CheckStyle的規(guī)則蜀撑,然后可以加入到持續(xù)構(gòu)建平臺中挤巡,定期掃描提交代碼是否符合規(guī)范,并給出報告酷麦。