1.基本編碼規(guī)范
2.代碼質(zhì)量控制工具
Amaze UI 使用
JSHint 和
JSCS ESLint控制代碼質(zhì)量。
詳細設(shè)置參見 .
jshintrc、
.jscsrc.
eslintrc。
2016.04.20 替換為 ESLint,參見 Welcoming JSCS to ESLint
(部分直接使用第三方庫的代碼未通過質(zhì)量控制工具檢測。)
3.jQuery / Zepto.js 使用規(guī)范
為提高代碼執(zhí)行效率,為二者兼容提供可能,在使用 jQuery / Zepto.js 時做以下約定:
- 存放 jQuery / Zepto 對象的變量以 $ 開頭;
- 禁止使用 slideUp/Down() fadeIn/fadeOut() 等方法;
- 盡量不使用 animate() 方法;
- 使用和 Zepto.js 兼容的基本選擇符,不使用效率較低且與 Zepto.js 不兼容的選擇符。
問題:
4.代碼格式
- 縮進 2 個空格;
- 使用多 var 模式聲明變量:更容易維護,比如要刪除第一個變量或者最后一個變量時,多 var 模式直接刪除即可,單 var 還要去修改別的行(for 循環(huán)例外);
Valid
var x = 1;
var y = 2;
for (var i = 0, j = arr.length; i < j; i++) {
}
Invalid
var x = 1,
y = 2;
5.命名規(guī)范
5.1 基本原則
- 文件和目錄名只能包含 [a-z\d\-],并以英文字母開頭
- 首選合適的英文單詞
- Data API 命名使用小寫、用連字符連接、添加 am 命名空間,如 data-am-trigger
- 事件名使用小寫字母,包含模塊名及 amui 命名空間名,使用 : 連接(Zepto 不支持使用 . 鏈接的自定義事件),如 .trigger('open:modal:amui')
- 符合規(guī)范
- 常量全大寫 UPPERCASE_WORD
- 變量駝峰 camelName
- 類名駝峰,并且首字母要大寫 CamelName
5.2 HTML Data API
- 基本: data-am-{組件名},如 data-am-modal、data-am-navbar-qrcode
- 傳參: data-am-modal="{key1: 'val1', key2: false}",core.js 中增加一個專門解析參數(shù)的函數(shù)
5.3 JavaScript
- 自定義事件命名:{自定義事件名}:{組件名}:{后綴},Zepto 不支持 . 分隔的自定義事件語法,官方示例中使用 : 分隔,如 closed:modal:amui。Zepto 中沒有 event.namespace,這樣的命名方式只用于清晰區(qū)分不同模塊的自定義事件。另外,按照 Zepto 官方示例,應(yīng)該寫成 amui:modal:closed,為跟 jQuery 的寫法統(tǒng)一,顛倒順序書寫。
- 默認綁定事件:事件名(內(nèi)置事件,非自定義事件)采用 {事件名}.{組件名}.{命名空間},如 $(document).on('click.modal.amui',...。
- 取消所有默認綁定事件: $(document).off('.amui',...
- 取消特定組件的默認綁定事件: $(document).off('.modal.amui',...
6.接口命名規(guī)范
通過接口規(guī)范,統(tǒng)一模塊對外接口的命名,形成一致的編寫習(xí)慣。
規(guī)則:
- 可讀性強,見名曉義。
- 盡量不與 jQuery 社區(qū)已有的習(xí)慣沖突。
- 盡量寫全。不用縮寫,除非是下面列表中約定的。(變量以表達清楚為目標(biāo),uglify 會完成壓縮體積工作)
常用詞 | 說明 |
---|
options | 表示選項,與 jQuery 社區(qū)保持一致,不要用 config, opts 等 |
active | 表示當(dāng)前,不要用 current 等 |
index | 表示索引,不要用 idx 等 |
trigger | 觸點元素 |
triggerType | 觸發(fā)類型、方式 |
context | 表示傳入的 this 對象 |
object | 推薦寫全,不推薦簡寫為 o, obj 等 |
element | 推薦寫全,不推薦簡寫為 el, elem 等 |
length | 不要寫成 len, l |
prev | previous 的縮寫 |
next | next 下一個 |
constructor | 不能寫成 ctor |
easing | 示動畫平滑函數(shù) |
min | minimize 的縮寫 |
max | maximize 的縮寫 |
DOM | 不要寫成 dom, Dom |
.hbs | 使用 hbs 后綴表示模版 |
btn | button 的縮寫 |
link | 超鏈接 |
title | 主要文本 |
img | 圖片路徑(img標(biāo)簽src屬性) |
dataset | html5 data-xxx 數(shù)據(jù)接口 |
theme | 主題 |
className | 類名 |
classNameSpace | class 命名空間 |
7.注釋規(guī)范
7.1總原則
- As short as possible(如無必要,勿增注釋):盡量提高代碼本身的清晰性、可讀性。
- As long as necessary(如有必要,盡量詳盡):合理的注釋、空行排版等,可以讓代碼更易閱讀、更具美感。
總之,注釋的目的是: 提高代碼的可讀性,從而提高代碼的可維護性。
7.2 什么時候需要添加注釋
// Using loop is more efficient than `rest = slice.call(arguments, 1)`.
for (i = 1, len = arguments.length; i < len; i++) {
rest[i - 1] = arguments[i];
}
- 添加上注釋,能讓代碼結(jié)構(gòu)更清晰時:
init: function(selector, context, rootjQuery) {
var match, elem, ret, doc;
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
...
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
...
}
// The body element only exists once, optimize finding it
if ( typeof selector === "string" ) {
...
}
}
// Inspired by https://github.com/jquery/jquery/blob/master/src/core.js
function ready() {
...
}
- 文件最后空一行,可以保證在 combo 合并后,源碼的層次清晰。
7.3 注釋書寫規(guī)范
- 源碼中的注釋,推薦用英文。
- 含有中文時,標(biāo)點符號用中文全角。
- 中英文夾雜時, 英文與中文之間要用一個空格分開。
- 注釋標(biāo)識符與注釋內(nèi)容要用一個空格分開:// 注釋 與 /* 注釋 */。
8.文檔規(guī)范
8.1 README.md
每個組件必須有 README.md 文件,用來描述組件的基本情況。
# 模塊名稱
-----
該模塊的概要介紹。
------
## 使用說明
如何使用該模塊,可以根據(jù)組件的具體特征,合理組織。
## API
需要提供 API 說明,屬性、方法、事件等。
## 使用示例
8.2 HISTORY.md
記錄組件的變更,最好和 issues 進行關(guān)聯(lián)。請閱讀
歷史記錄書寫規(guī)范。
9.參考鏈接
Amaze UI 的編碼規(guī)范參考了社區(qū)里一些先行者的做法,在此致謝!
更多建議: