跳到主內容

高效 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、函式或運算子。類成員可以是例項或靜態的,抽象或具體的。

  • 成員是庫成員或類成員。

  • 變數,一般而言,指頂層變數、引數和區域性變數。它不包括靜態或例項欄位。

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

  • 屬性是頂層變數、getter(在類中或頂層,例項或靜態)、setter(同上)或欄位(例項或靜態)。大致是指任何“類欄位”的命名構造。

所有規則總結

#

風格

#

識別符號

排序

格式化

文件

#

註釋

文件註釋

Markdown

編寫

用法

#

空值

字串

集合

函式

變數

成員

建構函式

錯誤處理

非同步

設計

#

名稱

類和 Mixin

建構函式

成員

型別

引數

相等性