七、書寫簡潔規(guī)范的代碼

代碼可以說是開發(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(精確浮點)

QQ圖片20181011153716.png
QQ圖片20181011153843.png

(4)命名約定

類的命名約定遵循大駝峰命名法:JavaBean,而方法名和變量名的命名遵循小駝峰命名規(guī)則法:startPlay.常量名使用大寫字母表示,單詞之間以下劃線分隔盾剩,例:public static final int CONNECTION_TIMEOUT = 1000;


QQ圖片20181011154008.png

(5)Javadoc(文檔注釋)

增加 方便代碼可讀性


QQ圖片20181011154107.png

B雷激、Android 命名規(guī)范

(1)布局文件的命名

布局文件的命名規(guī)則使用“前綴_邏輯名”的方式,全部小寫


QQ圖片20181011154210.png

(2)資源文件的命名

資源文件的命名規(guī)則使用 前綴模塊名邏輯名稱的方式告私,單詞全部小寫

QQ圖片20181011154307.png

(3)類的命名

類的命名遵循Java 的類命名規(guī)范屎暇,也就是使用大駝峰命名法,同時需要根據(jù)類的具體用途引入Android 相關(guān)的命名規(guī)則:


QQ圖片20181011154402.png

C驻粟、CheckStyle(編碼規(guī)范檢查插件)

在Android Studio 中根悼,我們可以引入CheckStyle 插件來進行編碼規(guī)范檢查,每個團隊根據(jù)自身的編碼格式按定制CheckStyle的規(guī)則蜀撑,然后可以加入到持續(xù)構(gòu)建平臺中挤巡,定期掃描提交代碼是否符合規(guī)范,并給出報告酷麦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末矿卑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子贴铜,更是在濱河造成了極大的恐慌粪摘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绍坝,死亡現(xiàn)場離奇詭異徘意,居然都是意外死亡,警方通過查閱死者的電腦和手機轩褐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門椎咧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人把介,你說我怎么就攤上這事勤讽。” “怎么了拗踢?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵脚牍,是天一觀的道長。 經(jīng)常有香客問我巢墅,道長诸狭,這世上最難降的妖魔是什么券膀? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮驯遇,結(jié)果婚禮上芹彬,老公的妹妹穿的比我還像新娘。我一直安慰自己叉庐,他們只是感情好舒帮,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陡叠,像睡著了一般玩郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枉阵,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天瓦宜,我揣著相機與錄音,去河邊找鬼岭妖。 笑死临庇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的昵慌。 我是一名探鬼主播假夺,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斋攀!你這毒婦竟也來了已卷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤淳蔼,失蹤者是張志新(化名)和其女友劉穎侧蘸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鹉梨,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡讳癌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了存皂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌坤。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖旦袋,靈堂內(nèi)的尸體忽然破棺而出骤菠,到底是詐尸還是另有隱情,我是刑警寧澤疤孕,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布商乎,位于F島的核電站,受9級特大地震影響祭阀,放射性物質(zhì)發(fā)生泄漏鹉戚。R本人自食惡果不足惜爬泥,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崩瓤。 院中可真熱鬧,春花似錦踩官、人聲如沸却桶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽颖系。三九已至,卻和暖如春辩越,著一層夾襖步出監(jiān)牢的瞬間嘁扼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工黔攒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趁啸,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓督惰,卻偏偏與公主長得像不傅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赏胚,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容