編寫程式碼示例的指南

本文件描述了 MDN Web Docs 上程式碼示例的編碼風格和格式指南,與程式語言無關。關於文字和其他內容的指南,請參閱 寫作風格指南

有關特定技術的指南,請參閱以下文章

程式碼示例的通用原則

您需要牢記一個最重要的考慮因素:讀者會複製貼上示例到他們自己的程式碼中,並可能將其投入生產。 因此,您應該確保程式碼示例是可用的,遵循普遍接受的最佳實踐,並且不會導致應用程式出現不安全、效率低下、臃腫或不可訪問的情況。

如果程式碼示例無法執行或不適用於生產環境,請在程式碼註釋和解釋性文字中包含警告;例如,如果它只是一個片段而不是完整的示例,請清楚地說明這一點。這也意味著您應該提供執行示例所需的所有資訊,包括任何依賴項和設定資訊。

程式碼示例應足夠簡潔易懂,但又足夠複雜能做一些有趣且(最好是)有用的事情。其目的不一定是製作出能給專家留下深刻印象、功能強大且高效的程式碼,而是分享可以快速理解和學習的、簡化的可執行示例。

一些更通用的指南包括

  • 程式碼示例應簡短,並且最好只展示您當前感興趣的功能。
  • 編寫程式碼時,請儘可能使其易於理解,即使它不是最高效的寫法。
  • 不要包含不必要的伺服器端程式碼、庫、框架、預處理器和其他此類依賴項。它們會使程式碼更難移植,也更難執行和理解。儘可能使用原生程式碼。
  • 不要假設讀者瞭解任何庫、框架、預處理器或其他非原生功能。例如,使用示例中具有意義的類名,而不是對於 BEM 或 Bootstrap 使用者有意義的類名。
  • 在程式碼示例中做到包容;請記住 MDN 的讀者來自世界各地,並且在種族、宗教、年齡、性別等方面都多種多樣。確保程式碼示例中的文字反映了這種多樣性,幷包容所有人。
  • 不要為了簡潔而使用已棄用的功能(例如 <big>document.write() 等表示元素);要正確使用。
  • 對於 API 演示,如果您同時使用了多個 API,請指出其中包含了哪些 API,以及功能來自哪裡。

瀏覽器支援

在為尚未在所有主要瀏覽器中都可用的技術建立程式碼示例時,請考慮使用 特性檢測 來回退到更簡單的行為,或告知使用者他們的瀏覽器尚不支援。請勿在程式碼註釋或文字中指定支援的瀏覽器及其版本,因為這些資訊會很快過時。

MDN 程式碼風格和格式

關於正確縮排、空白和行長的意見一直存在爭議。對這些主題的討論會分散建立和維護內容的精力。在 MDN Web Docs 上,我們使用 Prettier 作為程式碼格式化工具,以保持程式碼風格的一致性並避免跑題的討論。您可以檢視我們的 配置檔案 來了解當前規則,並閱讀 Prettier 文件

除了自動格式化之外,MDN 上的程式碼示例還有一些其他規則,以確保最終能得到良好的渲染。

選擇正確的語言

為確保程式碼塊的正確格式化和語法高亮,請正確指定程式碼塊的語言。請參閱 MDN Markdown 中的示例程式碼塊,瞭解 MDN 支援的語言列表以及如何請求新語言的詳細資訊。

如果程式碼塊是虛擬碼、命令的輸出,或者不是程式語言,請將語言設定為 plain

md
```plain
StaleElementReferenceException: The element reference of ABD-123 is stale…
```

警告: 如果目標語言尚未被 MDN 支援,請不要將程式碼塊的語言設定為相似的語言,因為這樣做可能會對 Prettier 的格式化和語法高亮產生意外的副作用。

程式碼行長度

程式碼行不應過長以至於需要水平滾動才能閱讀。為了可讀性,請在自然的斷點處換行,但不要犧牲最佳實踐。例如,這樣並不好

js
let tommyCat =
  "Said Tommy the Cat as he reeled back to clear whatever foreign matter may have nestled its way into his mighty throat. Many a fat alley rat had met its demise while staring point blank down the cavernous barrel of this awesome prowling machine.";

這樣更好,但有些彆扭

js
const tommyCat =
  "Said Tommy the Cat as he reeled back to clear whatever foreign " +
  "matter may have nestled its way into his mighty throat. Many a fat alley rat " +
  "had met its demise while staring point blank down the cavernous barrel of " +
  "this awesome prowling machine.";

使用模板字面量會更好

js
const tommyCat = `Said Tommy the Cat as he reeled back to clear whatever foreign
  matter may have nestled its way into his mighty throat. Many a fat alley rat
  had met its demise while staring point blank down the cavernous barrel of
  this awesome prowling machine.`;

程式碼塊高度

程式碼塊應與所需長度相同,不多不少。理想情況下,目標是簡短,例如 15-25 行。如果程式碼塊會更長,可以考慮顯示最有用的部分,並將完整的示例連結到 GitHub 倉庫、Gist 或 CodePen 等地方。

行內程式碼格式化

使用行內程式碼語法來標記函式名、變數名和方法名。例如,“frenchText() 函式”在 markdown 中寫為

md
the `frenchText()` function

方法名後面應跟一對括號:例如,doSomethingUseful()。括號有助於區分方法和其他程式碼術語。

正確渲染的指南

應遵循這些指南,以確保您編寫的程式碼示例在 MDN Web Docs 上正確顯示。您還應考慮響應式設計,使程式碼示例在移動裝置上也能使用。

渲染的程式碼示例大小

  • 寬度設定為 100%:MDN Web Docs 上的主內容區域在桌面上的寬度約為 700px,因此嵌入的程式碼示例必須在該寬度下看起來良好。
  • 高度設定為低於 700px:我們建議將此高度用於渲染的程式碼示例寬度,以獲得最佳的螢幕可讀性。

突出顯示好的或壞的示例

您會注意到在此頁面上,代表良好實踐的程式碼塊在右角會顯示綠色的對勾標記,而演示不良實踐的程式碼塊則顯示紅圈中的白色叉號。

您可以在編寫程式碼示例時遵循相同的樣式。您不必在所有地方都使用此樣式 — 只需在您想專門強調程式碼示例中良好和不良用法的地方使用。

程式碼塊使用 markdown 中的“程式碼圍欄”來分隔程式碼塊,後面跟資訊字串中的語言。例如

md
```js
function myFunc() {
  console.log("Hello!");
}
```

為了將程式碼塊表示為好或壞的示例,請在語言字串後新增 example-goodexample-bad,如下所示

md
```html example-good
<p>Good example</p>
```

```html example-bad
<p>Bad example</p>
```

這些將渲染為

html
<p>Good example</p>
html
<p>Bad example</p>

佔位符文字使用指南

使用從 lipsum.com 生成的 lorem-ipsum 佔位符文字,或 Lorem ipsum VS Code 外掛。標準的 lorem-ipsum 文字包含在我們的拼寫檢查器配置中,因此在 IDE 或程式碼審查期間的測試中不會被報告為拼寫錯誤。使用一致的佔位符文字使示例程式碼更易於審查,尤其是在重複出現時。它還有助於使示例清晰地用於說明目的,並避免因無關內容分散讀者的注意力。