跳到主要內容

Effective Dart

在過去幾年中,我們編寫了大量的 Dart 程式碼,並學習了很多關於什麼有效、什麼無效的知識。我們在此與您分享,讓您也能編寫一致、穩健、快速的程式碼。其中有兩個總體主題:

  1. 保持一致性。 當涉及到格式設定和大小寫等問題時,關於哪個更好的爭論是主觀的且不可能解決。我們確實知道的是,保持一致性在客觀上有幫助。

    如果兩段程式碼看起來不同,那應該是因為它們在某些有意義的方式上確實不同。當一小段程式碼突出並吸引您的目光時,它應該是為了有用的原因而這樣做。

  2. 保持簡潔。 Dart 的設計旨在讓人感到熟悉,因此它繼承了與 C、Java、JavaScript 和其他語言相同的許多陳述式和表達式。但我們建立 Dart 是因為這些語言提供的功能還有很大的改進空間。我們新增了一系列功能,從字串插值到初始化形式參數,以幫助您更簡單、更輕鬆地表達您的意圖。

    如果有多种方式表达同一件事,您通常应该选择最简洁的方式。但这并不是说您应该程式碼高爾夫,将整个程序塞进单行代码中。目标是精简而不是密集的代码。

指南

#

我們將指南分成幾個不同的頁面,以便於消化

  • 風格指南 – 這定義了程式碼的版面配置和組織規則,或至少是 dart format 無法為您處理的部分。風格指南還指定了識別碼的格式設定方式:camelCaseusing_underscores 等。

  • 文件指南 – 這告訴您關於註解內的所有知識。包括文件註解和常規、普通的程式碼註解。

  • 用法指南 – 這教您如何充分利用語言功能來實作行為。如果它在陳述式或表達式中,則此處涵蓋。

  • 設計指南 – 這是最寬鬆的指南,但範圍最廣。它涵蓋了我們在為函式庫設計一致、可用的 API 方面所學到的知識。如果它在類型簽名或宣告中,則此處會說明。

有關所有指南的連結,請參閱摘要

如何閱讀指南

#

每個指南都分為幾個章節。章節包含指南清單。每個指南都以以下其中一個詞開頭

  • DO 指南描述了應始終遵循的做法。幾乎永遠沒有正當理由偏離它們。

  • DON'T 指南則相反:幾乎永遠不是好主意的事情。希望我們不像其他語言那樣有那麼多這類指南,因為我們的歷史包袱較少。

  • PREFER 指南是您應該遵循的做法。但是,在某些情況下,否則可能更有意義。只是在您這樣做時,請務必了解忽略指南的全部含義。

  • AVOID 指南是「prefer」的雙重含義:您不應該做的事情,但在極少數情況下可能有充分的理由這樣做。

  • CONSIDER 指南是您可能想要或可能不想遵循的做法,具體取決於情況、先例和您自己的偏好。

有些指南描述了規則適用的例外情況。列出時,例外情況可能並不詳盡——您可能仍然需要在其他情況下使用您的判斷。

這聽起來像是如果你的鞋帶沒有正確繫好,警察就會破門而入。事情沒有那麼糟糕。這裡的大多數指南都是常識,而且我們都是理性的人。一如既往,目標是良好、可讀且可維護的程式碼。

Dart 分析器提供了一個 linter,以幫助您編寫遵循這些和其他指南的良好、一致的程式碼。如果存在一個或多個 linter 規則 可以幫助您遵循指南,則該指南會連結到這些規則。連結使用以下格式

Linter 規則:unnecessary_getters_setters

若要瞭解如何使用 linter,請參閱啟用 linter 規則linter 規則清單。

詞彙表

#

為了保持指南簡潔,我們使用了一些簡寫術語來指稱不同的 Dart 結構。

  • 函式庫成員是頂層欄位、getter、setter 或函式。基本上,任何在頂層但不是類型的東西。

  • 類別成員是在類別內部宣告的建構子、欄位、getter、setter、函式或運算子。類別成員可以是實例或靜態、抽象或具體。

  • 成員是函式庫成員或類別成員。

  • 變數,當一般使用時,指的是頂層變數、參數和區域變數。它不包括靜態或實例欄位。

  • 類型是任何具名類型宣告:類別、typedef 或列舉。

  • 屬性是頂層變數、getter(在類別內部或在頂層、實例或靜態)、setter(相同)或欄位(實例或靜態)。大致上是任何「類似欄位」的具名結構。

所有規則摘要

#

風格

#

識別碼

排序

格式設定

文件

#

註解

文件註解

Markdown

寫作

用法

#

函式庫

Null

字串

集合

函式

變數

成員

建構子

錯誤處理

非同步

設計

#

名稱

函式庫

類別和 Mixins

建構子

成員

類型

參數

相等性