Android編碼規(guī)范_第1頁
Android編碼規(guī)范_第2頁
Android編碼規(guī)范_第3頁
Android編碼規(guī)范_第4頁
Android編碼規(guī)范_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

Android 編碼規(guī)范 介紹介紹 1 為什么需要編碼規(guī)范為什么需要編碼規(guī)范 編碼規(guī)范對于程序員而言尤為重要 有以下幾個(gè)原因 一個(gè)軟件的生命周期中 80 的花費(fèi)在于維護(hù) 幾乎沒有任何一個(gè)軟件 在其整個(gè)生命周期中 均由最初的開發(fā)人員來維護(hù) 編碼規(guī)范可以改善軟件的可讀性 可以讓程序員盡快而徹底地理解新的代碼 如果你將源碼作為產(chǎn)品發(fā)布 就需要確任它是否被很好的打包并且清晰無誤 一如你 已構(gòu)建的其它任何產(chǎn)品 10 個(gè)工程師寫的代碼會看起來一個(gè)人寫的代碼 維護(hù)階段一目了然清晰 可以節(jié)省不少時(shí)間去熟悉看懂代碼等等 命名命名 2 包命名包命名 命名規(guī)則 一個(gè)唯一包名的前綴總是全部小寫的 ASCII 字母并且是一個(gè)頂級域名 通 常是 com edu gov mil net org 包名的后續(xù)部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部的命名 規(guī)范而不盡相同 這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門 department 項(xiàng)目 project 機(jī)器 machine 或注冊名 login names 例如 com hymobile nloc activities 規(guī)約 包命名必須以規(guī)約 包命名必須以 com hymobilecom hymobile 開始 后面跟有項(xiàng)目名稱 或者縮寫 開始 后面跟有項(xiàng)目名稱 或者縮寫 再后面為再后面為 模塊名或?qū)蛹壝Q 模塊名或?qū)蛹壝Q 如 com hymobile 項(xiàng)目縮寫 模塊名 com hymobile nloc bookmark 如 com hymobile 項(xiàng)目縮寫 層級名 com hymobile nloc activities 3 類和接口類和接口 命名命名 命名規(guī)則 類名是個(gè)一名詞 采用大小寫混合的方式 每個(gè)單詞的首字母大寫 盡量 使你的類名簡潔而富于描述 使用完整單詞 避免縮寫詞 除非該縮寫詞被更廣泛使用 像 URL HTML 接口一般要使用 able ible er 等后綴 例如 class Raster class ImageSprite 規(guī)約 類名必須使用駝峰規(guī)則 即首字母必須大寫 如果為詞組 則每個(gè)單詞的首字規(guī)約 類名必須使用駝峰規(guī)則 即首字母必須大寫 如果為詞組 則每個(gè)單詞的首字 母也必須要大寫 類名必須使用名詞 或名詞詞組 要求類名簡單 不允許出現(xiàn)無意母也必須要大寫 類名必須使用名詞 或名詞詞組 要求類名簡單 不允許出現(xiàn)無意 義的單詞 義的單詞 如如 classclass XXXActivityXXXActivity 如 class BookMarkAdd 正確 如 class AddBookReadPlanActivity 錯誤 錯誤 應(yīng)為 class BookReadPlanAdd 4 方法的命名方法的命名 命名規(guī)則 方法名是一個(gè)動詞 采用大小寫混合的方式 第一個(gè)單詞的首字母小寫 其后單詞的首字母大寫 例如 public void run public String getBookName 類中常用方法的命名 1 類的獲取方法 一般具有返回值 一般要求在被訪問的字段名前加上 get 如 getFirstName getLastName 一般來說 get 前綴方法返回的是單個(gè)值 find 前綴的方法返回的是列表值 2 類的設(shè)置方法 一般返回類型為 void 被訪問字段名的前面加上前綴 set 如 setFirstName setLastName 3 類的布爾型的判斷方法一般要求方法名使用單詞 is 或 has 做前綴 如 isPersistent isString 或者使用具有邏輯意義的單詞 例如 equal 或 equals 4 類的普通方法一般采用完整的英文描述說明成員方法功能 第一個(gè)單詞盡可能采 用動詞 首字母小寫 如 openFile addCount 5 構(gòu)造方法應(yīng)該用遞增的方式寫 參數(shù)多的寫在后面 6 toString 方法 一般情況下 每個(gè)類都應(yīng)該定義 toString 其格式為 5 變量命名變量命名 命名規(guī)則 第一個(gè)單詞的首字母小寫 其后單詞的首字母大寫 變量名不應(yīng)以下劃線 或美元符號開頭 盡管這在語法上是允許的 變量名應(yīng)簡短且富于描述 變量名的選 用應(yīng)該易于記憶 即 能夠指出其用途 盡量避免單個(gè)字符的變量名 除非是一次性 的臨時(shí)變量 臨時(shí)變量通常被取名為 i j k m 和 n 它們一般用于整型 c d e 它們一般用于字符型 例如 String bookName 規(guī)約 變量命名也必須使用駝峰規(guī)則 但是首字母必須小寫 變量名盡可能的使用名規(guī)約 變量命名也必須使用駝峰規(guī)則 但是首字母必須小寫 變量名盡可能的使用名 詞或名詞詞組 同樣要求簡單易懂 不允許出現(xiàn)無意義的單詞 詞或名詞詞組 同樣要求簡單易懂 不允許出現(xiàn)無意義的單詞 如 String bookName 正確 如 String bookNameString 錯誤 6 成員變量命名成員變量命名 同變量命名 但不要在私有變量前添加 m 字樣 7 常量命名常量命名 命名規(guī)則 類常量的聲明 應(yīng)該全部大寫 單詞間用下劃線隔開 例如 static final int MIN WIDTH 4 例如 static final int MAX WIDTH 999 例如 static final int GET THE CPU 1 8 異常命名異常命名 自定義異常的命名必須以必須以 ExceptionException 為結(jié)尾為結(jié)尾 已明確標(biāo)示為一個(gè)異常 9 layout 命名命名 規(guī)約 規(guī)約 layoutlayout xmlxml 的命名必須以的命名必須以 全部單詞小寫 單詞間以下劃線分割 并且使用名全部單詞小寫 單詞間以下劃線分割 并且使用名 詞或名詞詞組 即使用詞或名詞詞組 即使用 模塊名模塊名 功能名稱功能名稱 來命名 來命名 如 knowledge gained main xml 正確 如 list book xml 錯誤 10 id 命名命名 規(guī)約 規(guī)約 layoutlayout 中所使用的中所使用的 idid 必須以全部單詞小寫 單詞間以下劃線分割 并且使用必須以全部單詞小寫 單詞間以下劃線分割 并且使用 名詞或名詞詞組 并且要求能夠通過名詞或名詞詞組 并且要求能夠通過 idid 直接理解當(dāng)前組件要實(shí)現(xiàn)的功能 直接理解當(dāng)前組件要實(shí)現(xiàn)的功能 如 某 TextView id textbookname 錯誤 應(yīng)為 id book name show 如 某 EditText id textbookname 錯誤 應(yīng)為 id book name edit 11 資源命名資源命名 規(guī)約 規(guī)約 layoutlayout 中所使用的所有資源 如中所使用的所有資源 如 drawable styledrawable style 等 命名必須以全部單詞小等 命名必須以全部單詞小 寫 單詞間以下劃線分割 并且盡可能的使用名詞或名詞組 即使用寫 單詞間以下劃線分割 并且盡可能的使用名詞或名詞組 即使用 模塊名模塊名 用途用途 來來 命名 如果為公共資源 如分割線等 則直接用用途來命名命名 如果為公共資源 如分割線等 則直接用用途來命名 如 menu icon navigate png 正確 如 某分割線 line png 或 separator png 正確 12 activityactivity命名命名 activityactivity 中的中的 viewview 變量命名命名模式為 變量命名命名模式為 邏輯名稱邏輯名稱 view view 縮寫建議縮寫建議 如果如果 layoutlayout 文件很復(fù)雜 建議將文件很復(fù)雜 建議將 layoutlayout 分成多個(gè)模塊 每個(gè)模塊定義一個(gè)分成多個(gè)模塊 每個(gè)模塊定義一個(gè) moduleViewHoldermoduleViewHolder 其成員變量包含所屬 其成員變量包含所屬 viewview 13 activityactivity命名命名 strings xmlstrings xml 中的中的 idid 命名命名模式 命名命名模式 activityactivity 名稱名稱 功能模塊名稱功能模塊名稱 邏輯名稱 邏輯名稱 activityactivity 名稱名稱 邏輯名稱 邏輯名稱 common common 邏輯邏輯 名稱名稱 strings xmlstrings xml 中 使用中 使用 activityactivity 名稱注釋 將文件內(nèi)容區(qū)分開來名稱注釋 將文件內(nèi)容區(qū)分開來 注釋注釋 Java 程序有兩類注釋 實(shí)現(xiàn)注釋 implementation comments 和文檔注釋 document comments 實(shí)現(xiàn)注釋是使用 和 界定的注釋 文檔注釋 被稱為 doc comments 由 界定 文檔注釋可以通過 javadoc 工具轉(zhuǎn)換成 HTML 文件 注釋功能描述內(nèi)容在注釋功能描述內(nèi)容在 3030 字以內(nèi) 字以內(nèi) 1 文件注釋文件注釋 所有的源文件都應(yīng)該在開頭有一個(gè)注釋 其中列出類名 版本信息 日期和版權(quán)聲明 如下 文件名 包含類名列表 版本信息 版本號 創(chuàng)建日期 版權(quán)聲明 2 類注釋類注釋 每一個(gè)類都要包含如下格式的注釋 以說明當(dāng)前類的功能等 類名 author 作者 實(shí)現(xiàn)的主要功能 創(chuàng)建日期 修改者 修改日期 修改內(nèi)容 3 方法注釋方法注釋 每一個(gè)方法都要包含 如下格式的注釋 包括當(dāng)前方法的用途 當(dāng)前方法參數(shù)的含義 當(dāng)前方法返回值的內(nèi)容和拋出異常的列表 方法的一句話概述 方法詳述 簡單方法可不必詳述 param param s 說明參數(shù)含義 return return 說明返回值含義 throws throws IOException 說明發(fā)生此異常的條件 throws throws NullPointerException 說明發(fā)生此異常的條件 4 類成員變量和常量注釋類成員變量和常量注釋 成員變量和常量需要使用 java doc 形式的注釋 以說明當(dāng)前變量或常量的含義 為了以后方便生成 javadoc 文檔 XXXX含義 5 其他注釋其他注釋 方法內(nèi)部的注釋 如果需要多行 使用 形式 如果為單行是用 形式的注 釋 不要再方法內(nèi)部使用 java doc 形式的注釋 簡單的區(qū)分方法是 java doc 形式的注釋在 eclipse 中為藍(lán)色 普通注釋為綠色 6 XML 注釋注釋 規(guī)約 如果當(dāng)前 layout 或資源需要被多處調(diào)用 或?yàn)楣彩褂玫?layout 若 list item 則需要在 xml 寫明注釋 要求注釋清晰易懂 代碼風(fēng)格代碼風(fēng)格 1 縮進(jìn)縮進(jìn) 規(guī)約 不允許使用 Tab 進(jìn)行縮進(jìn) 使用空格進(jìn)行縮進(jìn) 推薦縮進(jìn)為 2 空格 2 空行空行 空行將邏輯相關(guān)的代碼段分隔開 以提高可讀性 下列情況應(yīng)該總是使用空行 一個(gè)源文件的兩個(gè)片段 section 之間 類聲明和接口聲明之間 兩個(gè)方法之間 方法內(nèi)的局部變量和方法的第一條語句之間 一個(gè)方法內(nèi)的兩個(gè)邏輯段之間 用以提高可讀性 一個(gè)臨時(shí)或不確定方法使用 TODO 注釋并說明 規(guī)約 通常在 變量聲明區(qū)域之后要用空行分隔 常量聲明區(qū)域之后要有空行 分隔 方法聲明之前要有空行分隔 3 行寬行寬 無特別規(guī)定 因?yàn)楝F(xiàn)在的顯示器都比較大 所以推薦使用 120 進(jìn)行設(shè)置 規(guī)約規(guī)約 1 方法方法 一個(gè)方法盡量不要超過 15 行 如果方法太長 說明當(dāng)前方法業(yè)務(wù)邏輯已經(jīng)非常復(fù)雜 那么就需要進(jìn)行方法拆分 保證每個(gè)方法只作一件事 不要使用 try catch 處理業(yè)務(wù)邏輯 2 參數(shù)和返回值參數(shù)和返回值 一個(gè)方法的參數(shù)盡可能的不要超過 4 個(gè) 如果一個(gè)方法返回的是一個(gè)錯誤碼 請加 try 異常處理 盡可能不要使用 null 替代為異常 或者使用空變量 如返回 List 則可以使用 Collections emptyList 3 神秘的數(shù)神秘的數(shù) 代碼中不允許出現(xiàn)單獨(dú)的數(shù)字 字符 如果需要使用數(shù)字或字符 則將它們按照含義封裝 為靜態(tài)常量 for 語句中除外 4 控制語句控制語句 判斷中如有常量 則應(yīng)將常量置于判斷式的右側(cè) 如 if true isAdmin 盡量不使用三目條件的嵌套 所有 if 語句必須用 花包括起來 即便是只有一句 if true do something 請不要耍小技巧 if true i 0 不要使用這種 對于循環(huán) 不推薦方式 while index products getCount 每此都會執(zhí)行一次 getCount 方法 若此方法耗時(shí)則會影響執(zhí)行效率 而且可能帶來同步問題 若有同步需求 請使用同步塊或同步方法 推薦方式 將操作結(jié)構(gòu)保存在臨時(shí)變量里 減少方法調(diào)用次數(shù) final int count products getCount while index 0 x x 21 種代碼的壞味道種代碼的壞味道 應(yīng)該在編程中盡量避免這 21 種 壞味道 1 Duplicated Code 代碼重復(fù)幾乎是最常見的異味了 他也是 Refactoring 的主要目標(biāo)之一 代碼重復(fù)往 往來自于 copy and paste 的編程風(fēng)格 2 Long method 它是傳統(tǒng)結(jié)構(gòu)化的 遺毒 一個(gè)方法應(yīng)當(dāng)具有自我獨(dú)立的意圖 不要把幾個(gè)意圖 放在一起 3 Large Class 大類就是你把太多的責(zé)任交給了一個(gè)類 這里的規(guī)則是 One Class One Responsibility 4 Divergent Change 一個(gè)類里面的內(nèi)容變化率不同 某些狀態(tài)一個(gè)小時(shí)變一次 某些則幾個(gè)月一年才變一次 某些狀態(tài)因?yàn)檫@方面的原因發(fā)生變化 而另一些則因?yàn)槠渌矫娴脑蜃円淮?面向?qū)ο?的抽象就是把相對不變的和相對變化相隔離 把問題變化的一方面和另一方面相隔離 這 使得這些相對不變的可以重用 問題變化的每個(gè)方面都可以單獨(dú)重用 這種相異變化的共 存使得重用非常困難 5 Shotgun Surgery 這正好和上面相反 對系統(tǒng)一個(gè)地方的改變涉及到其他許多地方的相關(guān)改變 這些變化率 和變化內(nèi)容相似的狀態(tài)和行為通常應(yīng)當(dāng)放在同一個(gè)類中 6 Feature Envy 對象的目的就是封裝狀態(tài)以及與這些狀態(tài)緊密相關(guān)的行為 如果一個(gè)類的方法頻繁用 get 方法存取其他類的狀態(tài)進(jìn)行計(jì)算 那么你要考慮把行為移到涉及狀態(tài)數(shù)目最多的那個(gè)類 7 Data Clumps 某些數(shù)據(jù)通常像孩子一樣成群玩耍 一起出現(xiàn)在很多類的成員變量中 一起出現(xiàn)在許多方 法的參數(shù)中 這些數(shù)據(jù)或許應(yīng)該自己獨(dú)立形成對象 8 Primitive Obsession 面向?qū)ο蟮男率滞ǔA?xí)慣使用幾個(gè)原始類型的數(shù)據(jù)來表示一個(gè)概念 譬如對于范圍 他們 會使用兩個(gè)數(shù)字 對于 Money 他們會用一個(gè)浮點(diǎn)數(shù)來表示 因?yàn)槟銢]有使用對象來表達(dá) 問題中存在的概念 這使得代碼變的難以理解 解決問題的難度大大增加 好的習(xí)慣是擴(kuò) 充語言所能提供原始類型 用小對象來表示范圍 金額 轉(zhuǎn)化率 郵政編碼等等 9 Switch Statement 基于常量的開關(guān)語句是 OO 的大敵 你應(yīng)當(dāng)把他變?yōu)樽宇?state 或 strategy 10 Parallel Inheritance Hierarchies 并行的繼承層次是 shotgun surgery 的特殊情況 因?yàn)楫?dāng)你改變一個(gè)層次中的某一個(gè)類時(shí) 你必須同時(shí)改變另外一個(gè)層次的并行子類 11 Lazy Class 一個(gè)干活不多的類 類的維護(hù)需要額外的開銷 如果一個(gè)類承擔(dān)了太少的責(zé)任 應(yīng)當(dāng)消除 它 12 Speculative Generality 一個(gè)類實(shí)現(xiàn)了從未用到的功能和通用性 通常這樣的類或方法唯一的用戶是 testcase 不 要猶豫 刪除它 13 Temporary Field 一個(gè)對象的屬性可能只在某些情況下才有意義 這樣的代碼將難以理解 專門建立一個(gè)對 象來持有這樣的孤兒屬性 把只和他相關(guān)的行為移到該類 最常見的是一個(gè)特定的算法需 要某些只有該算法才有用的變量 14 Message Chain 消息鏈發(fā)生于當(dāng)一個(gè)客戶向一個(gè)對象要求另一個(gè)對象 然后客戶又向這另一對象要求另一 個(gè)對象 再向這另一個(gè)對象要求另一個(gè)對象 如此如此 這時(shí) 你需要隱藏分派 15 Middle Man 對象的基本特性之一就是封裝 而你經(jīng)常會通過分派去實(shí)現(xiàn)封裝 但是這一步不能走得太 遠(yuǎn) 如果你發(fā)現(xiàn)一個(gè)類接口的一大半方法都在做分派 你可能需要移去這個(gè)中間人 16 Inappropriate Intimacy 某些類相互之間太親密 它們花費(fèi)了太多的時(shí)間去磚研別人的私有部分 對人類而言 我 們也許不應(yīng)該太假正經(jīng) 但我們應(yīng)當(dāng)讓自己的類嚴(yán)格遵守禁欲主義 17 Alternative Classes with Different Interfaces 做相同事情的方法有不同的函數(shù) signature 一致把它們往類層次上移 直至協(xié)議一致 18 Incomplete L

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論