目錄

Effective Dart

在過去幾年中,我們撰寫了大量的 Dart 程式碼,並了解了哪些方法有效,哪些方法無效。我們與您分享這些經驗,讓您也能撰寫一致、穩健、快速的程式碼。其中有兩個主要主題:

  1. 保持一致性。 當談到格式化和大小寫等問題時,關於哪個更好之類的爭論是主觀且無法解決的。我們知道的是,一致性在客觀上是有幫助的。

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

  2. 簡潔。 Dart 的設計目標是熟悉,因此它繼承了 C、Java、JavaScript 和其他語言的許多相同語句和表達式。但我們創建 Dart 是因為這些語言提供的內容還有很大的改進空間。我們添加了許多功能,從字串插值到初始化形式參數,以協助您更簡單輕鬆地表達您的意圖。

    如果有多种方式可以表達某事物,您通常應該選擇最簡潔的方式。這並不是說您應該進行程式碼高爾夫,將整個程式塞進一行中。目標是經濟而不是密集的程式碼。

指南

#

為了方便消化,我們將指南分成幾個獨立的頁面

  • 樣式指南 – 這定義了程式碼的佈局和組織規則,或者至少是 dart format 不會為您處理的部分。樣式指南還指定了識別碼的格式:camelCaseusing_underscores 等。

  • 文件指南 – 這告訴您所有關於註解內部內容的知識。包括文件註解和一般程式碼註解。

  • 用法指南 – 這教您如何最佳化語言功能以實作行為。如果它在語句或表達式中,這裡就會涵蓋它。

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

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

如何閱讀指南

#

每個指南都分為幾個部分。部分包含指南列表。每個指南都以以下其中一個詞開頭

  • DO 指南描述了應始終遵循的實務。幾乎不會有正當理由偏離它們。

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

  • PREFER 指南是您應該遵循的實務。但是,在某些情況下,這樣做可能才有意義。只要確保您在忽略指南時了解其全部含義即可。

  • AVOID 指南是「偏好」的反面:您不應該做的事情,但在極少數情況下可能有充分的理由這樣做。

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

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

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

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

Linter 規則:unnecessary_getters_setters

若要了解如何使用 linter,請參閱啟用 linter 規則linter 規則列表。

詞彙表

#

為了使指南簡潔,我們使用了一些簡寫術語來指代不同的 Dart 建構。

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

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

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

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

  • 類型是任何已命名的類型宣告:類別、類型別名或列舉。

  • 屬性是頂層變數、getter(在類別內或頂層,執行個體或靜態)、setter(相同)或欄位(執行個體或靜態)。大致上是指任何「類似欄位」的已命名建構。

所有規則摘要

#

用法

#

函式庫

Null

字串

集合

函式

變數

成員

建構子

錯誤處理

非同步

設計

#

命名

函式庫

類別和 mixin

建構子

成員

類型

參數

相等性