[譯]Effective Dart: Style

良好的代碼風格相當重要。一致的命名規則,順序結構和格式化有助於代碼看起來相同。它利用了咱們視覺系統的模式匹配能力。若是咱們在整個Dart生態系統中使用一致的風格,那麼咱們全部人均可以更輕鬆地學習和修改彼此的代碼。函數

標識符

  • 使用UpperCamelCase 命名類型.
  • 使用lowercase_with_underscores命名庫和源文件.
  • 使用lowercase_with_underscores命名導入前綴.
  • 使用lowerCamelCase 命名其餘標識符.
  • 推薦使用lowerCamelCase 命名常量.
  • 使用首字母大寫和縮略詞長度超過兩個字母.
  • 不要使用字母前綴.

導入庫順序

  • 「dart:」放在文件最上面.
  • 「package:」放在相關庫前面.
  • 推薦「third-party」 「package:」放在其餘庫前面.
  • 在全部導入後,指定單獨的部分.
  • 其餘部分,按照字母順序進行排序.

格式化

  • 使用dartfmt 格式化代碼.
  • 考慮更改代碼使其更容易格式化.
  • 避免每行超過80個字符.
  • 使用{}進行流程控制.

標識符

Dart中的標誌符,有三種風格。學習

  • UpperCamelCase 每一個單詞的首字母大寫,包括第一個單詞.編碼

  • lowerCamelCase 第一個單詞首字母小寫(即便是縮略詞),其餘單詞的首字母大寫.3d

  • lowercase_with_underscores 只使用小寫字母,即便是首字母,縮略詞,也只是用 _ 分隔.cdn

使用UpperCamelCase 命名類型

類, 枚舉, typedefs, 和 類型參數應該大寫每一個單詞的首字母, 並使用分隔符.blog

1

甚至包括元數據註釋 排序

2

若是註釋類的構造函數不帶參數,則可能須要爲其建立單獨的lowerCamelCase常量。作用域

使用lowercase_with_underscores命名庫和源文件

某些文件系統不區分大小寫,所以許多項目要求文件名所有爲小寫。 使用分隔字符能夠確保可讀性。使用下劃線做爲分隔符可確Dart標識符有效,若是Dart稍後支持符號導入,能夠避免兼容問題。文檔

Note: 若是使用標準規則命名庫,你能夠在庫文件省略說明字符串

使用lowercase_with_underscores命名導入前綴

使用lowerCamelCase 命名其餘標識符

類成員,頂級定義,變量,參數和命名參數應該大寫除第一個單詞以外的每一個單詞的第一個字母,而且不使用分隔符。

推薦使用lowerCamelCase 命名常量

在新代碼中,使用lowerCamelCase做爲常量變量,包括枚舉值。 在使用SCREAMING_CAPS的現有代碼中,您能夠繼續使用所有大寫以保持一致。

Note: 咱們最初使用Java的SCREAMING_CAPS樣式來表示常量。 但咱們改變了,由於: -SCREAMING_CAPS在許多狀況下都很糟糕,特別是像CSS顏色這樣的枚舉值. 。 在枚舉類型上自動定義的values屬性是const和lowercase。

  • 常量一般最終更改成很是量變量,這將須要更更名稱.
  • 在枚舉類型上自動定義變量屬性是常量和 lowercase.

使用首字母大寫和縮略詞長度超過兩個字母

大寫的首字母縮略詞可能難以閱讀,而多個相鄰的首字母縮略詞可能會致使模糊的名稱。 例如,若是名稱以HTTPSFTP開頭,則沒法判斷它是指HTTPS FTP仍是HTTP SFTP。 爲了不這種狀況,首字母縮略詞和縮寫詞像普通詞同樣大寫,除了兩個字母的首字母縮略詞。 (像ID和Mr.這樣的兩個字母的縮寫仍然像文字同樣大寫。)

不要使用字母前綴

匈牙利命名法和其餘方案出如今BCPL時,當時的編譯器不能作太多,幫助您理解代碼。 由於Dart能夠告訴您聲明的類型,做用域,可變性和其餘屬性,因此沒有必要在標識符名稱中對這些屬性進行編碼。

包導入順序

爲了使文件的序言保持整潔,咱們有規定的出現順序。每一個「部分」用空行分隔。

「dart:」放在文件最上面

「package:」放在相關庫前面

推薦「third-party」 「package:」放在其餘庫前面

若是您導入許多本身的包和其餘第三方包,請您在外部軟件包以後加上空行進行分隔。

在全部導入後,指定單獨的部分

其餘部分,按照字母順序進行排序.

格式化

像許多語言同樣,Dart忽略空格。 可是,人類沒有。具備一致的空樣式有助於確保人類讀者與編譯器以相同方式查看代碼。

使用dartfmt 格式化代碼

格式化是一項繁瑣的工做,在重構過程當中特別耗時。 幸運的是,你沒必要擔憂它。 咱們提供了一個名爲dartfmt的複雜自動代碼格式化程序,它能夠爲您完成。 咱們提供了使用文檔,可是Dart的官方空白處理規則是dartfmt產生的。

其他格式化指南,適用於dartfmt沒法爲您修復的一些內容。

考慮更改代碼使其更容易格式化

格式化程序會對你寫的代碼不遺餘力,但它不是神。 若是您的代碼具備特別長的標識符,深層嵌套的表達式,混合不一樣類型的運算符等問題,這樣即便格式化,輸出代碼仍然難以閱讀。

發生這種狀況時,應該從新組織或簡化您的代碼。 考慮縮短局部變量名稱或將表達式提高到新的局部變量中。 換句話說,若是您手動格式化代碼並嘗試使其更具可讀性,請進行相同類型的修改。 當寫代碼時將dartfmt視爲一種合做關係,有時能夠迭代地生成漂亮的代碼。

避免每行超過80個字符

可讀性研究代表,長行文字難以閱讀,由於當你移動到下一行的開頭時,你的眼睛必須走得更遠。 這就是爲何報紙和雜誌使用多列文本。

若是你真的發現本身想要超過80個字符的行,咱們的經驗是你的代碼可能過於冗長而且可能更緊湊。 主要問題一般是VeryLongCamelCaseClassNames。 問問本身,「該類型名稱中的每一個單詞是否告訴我一些關鍵信息或防止名稱衝突?」若是不是,請考慮省略它。

請注意,dartfmt會爲您完成99%,但最後1%須要您完成。 它不會將長字符串文字拆分爲80列,所以您必須手動執行此操做。

咱們對URI和文件路徑進行了額外處理。當這些出如今註釋或字符串中時(一般在導入和導出中),即便超出行限制,它們也可能保留在一行中。這樣能夠更輕鬆地搜索指定路徑的源文件。

使用{}進行流程控制

避免懸空問題

有一個例外:一個沒有else子句的if語句,其中整個if語句和執行語句適合一行。 在這種狀況下,若是您願意,能夠不用括號:

若是正文包裹到下一行,請使用大括號:

相關文章
相關標籤/搜索