>編寫高質量的Dart正在針當前實踐和Dart2在更新。如果你發現了一些沒有[被發現的問題](https://github.com/dart-lang/site-www/labels/EffectiveDart),請提交bug。
>
在過去的幾年中,我們已經編寫了大量的Dart代碼,并且了解了很多關于哪些代碼有效,哪些代碼無效。我們將與您分享這一點,以便您也可以編寫一致的、健壯的、快速的代碼。主要有兩個主題:
* 一致的:當涉及到格式化和大小寫時,關于哪個更好的爭論是主觀的,并且不可能解決。我們所知道的是保持一致在客觀上是有幫助的。
如果兩段代碼看起來不一樣,那是因為它們在某種意義上是不同的。當一些代碼引人注目并引起您的注意時,它應該出于一個有用的原因這樣做。
* 簡潔的: Dart被設計的讓我們感覺非常熟悉,因此它繼承了許多與C,Java,JavaScript和其他語言相同的語句和表達式。 但我們創建了Dart,因為這些語言提供了很多改進的空間。 我們添加了一系列功能,從字符串插值到初始化形式,以幫助您更簡單,更輕松地表達您的意圖。
如果有多種表達方式,你應該選擇最簡潔的一種。這不是說你像Code golf(一種娛樂性的計算機編程競賽)一樣把所有代碼都寫在一行。我們的目標是經濟有效的代碼量而不是密集的代碼。
## 指南
為了便于理解,我們將引導部分分成以下幾個章節:
* 樣式引導--這定義了布局和組織代碼的規則,或者至少是darfmt不為您處理的部分。樣式指南還指定了標識符的格式化方式:駝峰法、下換線規則等。
* 文檔引導--這將告訴你所有你需要知道的關于注釋內部的信息。文檔注釋和普通的代碼注釋。
* 使用引導--這將教你如何充分利用語言特性來實現行為。如果它在一個語句或表達式中,它就在這里。
* 設計引導--這是最軟的指南,但卻是最廣泛的。它涵蓋了關于為庫設計一致的、可用的api的知識。如果它在類型簽名或聲明中,這個就會跳過它。
## 如何閱讀指南
每個指南被分成幾個部分。部分包含指南列表。每條指南都以以下一句話開頭:
* 【規定】描述了應該始終遵循的實踐規則。幾乎沒有理由拋開這些規定。
* 【禁忌】是相反的:說明了那些不被推薦的實踐。但愿我們不要像其他語言一樣有過多的這種禁忌中的問題發生,因為我們沒有歷史包袱。
* 【優先】是應該遵循的規則。然而,在某些情況下,如果不這樣做可能是有意義的。只要你確保理解了在哪些地方應該忽略本指南以及為什么要忽略。
* 【避免】說明了我們盡量避免的一些做法,但是在一些罕見的情況下我們也可以這樣去做。
* 【考慮】是一些你可以遵循也可以不遵循的一些實踐建議,主要取決于環境、先例和你自己的偏好。
聽起來就像你的鞋帶系錯了警察就會破門而入一樣。其實情況沒有那么糟糕,這里的大部分指南都是常識,我們都是通情達理的人。目標都是寫出良好的,可讀的,可維護的代碼。
## 術語
* 【庫成員】是頂級字段,getter,setter或者函數。基本上任何在頂層不是類型的東西。
* 【類成員】是類中聲明的構造函數,字段,getter,setter,函數或操作符。類成員可以是實例、靜態、抽象或具體的。
* 【成員】可以是庫成員,也可以是類成員。
* 【變量】通常情況下,變量指的是頂級變量、參數和局部變量。它不包含靜態或實例字段。
* 【類型】是任何命名類型聲明:類、typedef或enum。
* 【屬性】是頂級變量、getter(在類內部或頂層,實例或靜態)、setter(same)或字段(實例或靜態)。大致上是任何“類字段”的命名構造。