1. 程式人生 > >《編寫可維護的JavaScript》讀書筆記之程式設計風格-註釋

《編寫可維護的JavaScript》讀書筆記之程式設計風格-註釋

註釋

註釋是程式碼中最常見的組成部分。它們是另一種形式的文件,也是程式設計師最後才捨得花時間去寫的。但是,對於程式碼的總體可維護性而言,註釋是非常重要的一環。適度的添加註釋可以解釋說明程式碼的來龍去脈,其他開發者就可以不用從頭開始讀程式碼,而是直接去讀程式碼的任意部分。

JavaScript 支援兩種不同型別的註釋:單行註釋和多行註釋。

單行註釋

兩個斜線開始,至行尾結束。

// 這是一句單行註釋

【風格】:很多人喜歡在雙斜線之後敲入一個空格(我也喜歡),用來讓註釋文字有一定的偏移。

【使用方法】:

  • 獨佔一行的註釋,用來解釋下一行程式碼。這行註釋之前總有一個空行,且縮排層級和下一行程式碼保持一致。
  • 在程式碼行的尾部的註釋。程式碼結束到註釋之間至少有一個縮排。註釋(包括之前的程式碼部分)不應當超過單行最大字元數限制,如果超過了,就將這條註釋放置於當前程式碼行的上方。
  • 被註釋掉的大段程式碼。

【注意】:單行註釋不應該以連續多行註釋的形式出現,除非你註釋掉一大段程式碼。

【示例】:

// 好的寫法
if (condition) {
    
    // 如果程式碼執行到這裡,則表明通過了所有安全性檢查
    allowed();
}

// 不好的寫法:註釋之前沒有空行
if (condition) {
    // 如果程式碼執行到這裡,則表明通過了所有安全性檢查
    allowed();
}

// 不好的寫法:錯誤的縮排
if (condition) {

// 如果程式碼執行到這裡,則表明通過了所有安全性檢查
    allowed();
}

// 好的寫法
var result = something + somethingElse; // somethingElse 不應當取值為 null

// 不好的寫法:程式碼和註釋之間沒有間隔
var result = something + somethingElse;// somethingElse 不應當取值為 null

// 好的寫法
// if (condition) {
//     doSomething();
//     thenDoSomethingElse();
// }

// 不好的寫法:這裡應當用多行註釋
// 接下來的這段程式碼非常難,那麼,讓我詳細解釋一下
// 這段程式碼的作用是首先判斷條件是否為真
// 只有為真時才會執行,這裡的條件是通過
// 多個函式計算出來的,在整個會話生命週期內
// 這個值是可以被修改的
if (condition) {
    // 如果程式碼執行到這裡,則表明通過了所有安全性檢查
    allowed();
}

多行註釋

多行註釋可以包裹跨行文字,以 /* 開始,以 */ 結束。

【示例】:多行註釋不僅僅可以用來包裹跨行文字,這取決於你。

/* 我的註釋 */
/* 另一段註釋
這段註釋包含兩行 */
/*
又是一段註釋
這段註釋同樣包含兩行
*/

【風格】:java 風格的多行註釋。

/*
 * 另一段註釋
 * 這段註釋包含兩行文字
 */

【說明】:至少包含三行,第一行為 /*,第二行開始以 * 開始且和上一行的 * 保持左對齊,最後一行為 */ 並且星號與之後的註釋說明文字間隔一個空格。

【使用方法】:
總是出現在將要描述的程式碼段之前,註釋和程式碼之間沒有空行間隔。和單行註釋一樣,在多行註釋之前應當有一個空行,且縮排層級和其描述的程式碼保持一致。

【示例】:

// 好的寫法
if (condition) {
    
    /*
     * 如果程式碼執行到這裡
     * 說明通過了所有的安全性檢查
     */
    allowed();
}

// 不好的寫法:註釋之前無空行
if (condition) {
    /*
     * 如果程式碼執行到這裡
     * 說明通過了所有的安全性檢查
     */
    allowed();
}

// 不好的寫法:星號後沒有空格
if (condition) {

    /*
     *如果程式碼執行到這裡
     *說明通過了所有的安全性檢查
     */
    allowed();
}

// 不好的寫法:錯誤的縮排
if (condition) {

/*
 * 如果程式碼執行到這裡
 * 說明通過了所有的安全性檢查
 */
    allowed();
}

// 不好的寫法:程式碼尾部註釋不要用多行註釋格式
var result = something + somethingElse; /* somethingElse 不應當取值為 null */

使用註釋

一種通行的指導原則是,當代碼不夠清晰時添加註釋,而當代碼很明瞭時不應當添加註釋。

【一般原則】:在需要讓程式碼變得更清晰時添加註釋。

難於理解的程式碼

難於理解的程式碼通常都應當添加註釋。根據程式碼的用途,可以用單行註釋、多行註釋,或是混用這兩種註釋。關鍵是讓其他人更容易讀懂這段程式碼。

可能被誤認為錯誤的程式碼

當代碼看上去有錯誤時,需要寫上註釋以防其他開發者好心進行“修復”。

瀏覽器特性 hack

JavaScript 程式設計師常常會編寫一些低效的、不雅的、徹頭徹尾的骯髒程式碼,用來讓低階瀏覽器正常工作。實際上這種情形是一種特殊的“可能被誤認為錯誤的程式碼”:這種不明顯的做瀏覽器特性 Hack 的程式碼可能隱含一些錯誤。

文件註釋

從技術角度來講,文件註釋並不是JavaScript的組成部分,但它們是一種普遍的實踐。

【風格】:JavaDoc 文件格式。

【格式】:多行註釋以單斜線加雙星號(/**)開始,接下來是描述資訊,其中使用@符號來表示一個或多個屬性。

【示例】:

/**
 ........
 @method merge
 @param {Object} 被合併的一個或多個物件
 @return {Object} 一個新的合併後的物件
 **/

【注意】:註釋的詳細格式和用法最終還是由你所選擇的文件生成工具決定的。

【需要添加註釋的內容】:

  • 所有的方法:應當對方法、期望的引數和可能的返回值添加註釋描述。
  • 所有的建構函式:應當對自定義型別和期望的引數添加註釋描述。
  • 所有包含文件化方法的物件:如果一個物件包含一個或多個附帶文件註釋的方法,那麼這個物件也應當適當地針對文件生成工具新增文件註釋。