Android & Java 書寫簡潔規範的程式碼

四級五次郎發表於2017-07-21

寫出簡潔規範的程式碼對於開發者而言非常重要,它體現了開發者自己的專業性和技術水平,而且能夠贏得別人的讚賞。對團隊來說,團隊成員遵循統一的程式碼規範,能夠更好地維護程式碼庫的穩定和諧。
《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。

歡迎指正錯誤和留言

csdn 地址:blog.csdn.net/sinat_36668…

相關文章