文章首發(fā)地址: http://www.itdecent.cn/p/047eb78dce53
前言
最近看qq群里發(fā)的很多代碼截圖,感覺命名規(guī)則/文件命名都不符合規(guī)范
很多朋友都是從其他語言轉(zhuǎn)向dart/flutter的,深感語言環(huán)境還需要大家共同去維護,建議還是規(guī)范化代碼,這樣所有人看著都會舒服
恰好dart語言官方有自己的代碼規(guī)范和相關(guān)的說明,在dartlang官網(wǎng)上,英文好的建議閱讀原文
連接地址 https://www.dartlang.org/guides/language/effective-dart/style
我這里僅粗略翻譯和加入一些自己的理解
圖片均來自于上述url對應(yīng)的頁面中
當前dart版本為2.0版本,日期為2018年08月22日
可能會在未來有改動,到時請以最新文檔為準
文檔中圖片的綠色部分為正例,右上角帶good標識
紅色是反例,右上角帶bad標識
標識方案

在dart有3種常規(guī)標識方案
第一個為大寫字母開頭的駝峰式 如 UserInterface 每個詞的首字母為大寫
第二個是小寫開頭的駝峰式,如testRun,第一個單詞是小寫,后續(xù)每個單詞首字母大寫
第三個是每個單詞均為小寫,以下劃線分隔,如user_response
總結(jié)
如果不想往下看具體的圖片和翻譯,直接看這里
文件名: 小寫+下劃線
類型名(類名,函數(shù)類型名):大寫開頭駝峰
變量名(包含const final 常量):使用小寫開頭駝峰, 項目有特殊要求 const可以使用大寫+下劃線的方式,如同java中一樣
導(dǎo)包as后的名稱為小寫+下劃線
不要用匈牙利命名法中的kXXXX 這樣的命名方式,應(yīng)該去掉k
超過兩位的英文縮寫一律按該單詞為普通小寫單詞處理,使用小寫
導(dǎo)包有順序要求,且每"部分"間空行分隔開,每部分內(nèi)按字母排序,按如下順序排序
dart sdk內(nèi)的庫
flutter內(nèi)的庫
第三方庫
自己的庫
相對路徑引用
先全部import再export,不要交替進行
使用dartfmt工具格式化dart文件代碼 dartfmt -w lib/ flutter可以用flutter format lib
單行字符建議不要超過80個
流程控制語句無論如何都使用花括號包裹,即使只有單行
格式化個人建議:
建議不要使用idea/as/vscode 的自動儲存格式化作為交付
因為idea/vs有自己的格式化工具,并不是使用的dartfmt,這樣會造成代碼交付格式不統(tǒng)一,寫代碼過程中可以使用以方便提高閱讀性,但每次代碼commit前建議使用 dartfmt -w lib/ 來格式化代碼,以便于項目代碼風(fēng)格的統(tǒng)一,flutter用戶使用 flutter format lib
類型名稱

適用于類名,注解名,typedef定義的函數(shù)名
這里有一個特例,當你的注解是一個const的常量時,使用@foo的方式作為注解
庫名稱,文件名用小寫+下劃線

使用小寫+下劃線方式命名library,文件名
原因如下:
某些文件系統(tǒng)不區(qū)分大小寫,因此許多項目要求文件名全部為小寫。使用分隔字符允許名稱仍以該形式可讀。使用下劃線作為分隔符可確保名稱仍然是有效的Dart標識符
導(dǎo)入時

當導(dǎo)入包時, 如果涉及到as, 一律使用小寫+下劃線方式
其他標識符

包含頂級成員,類成員,方法內(nèi)成員,參數(shù)名,命名參數(shù)名,一律使用小寫駝峰式
常量名稱

建議使用小寫駝峰式命名
但是你的項目中如果使用大寫+下劃線分割單詞的方式,則可以繼續(xù)使用這種方式
這里有個小說明:最初dart中采用的大寫+下劃線方式,但是后來有一些變量需要修改為非const變量,就需要修改為小寫駝峰式,后一律使用小寫駝峰式
縮寫相關(guān)

超過兩位的使用常規(guī)方式,兩位以內(nèi)使用大寫
在小寫駝峰式中,會出現(xiàn)一些約定俗成的縮寫,如http ftp io等,這些在英文詞法中都應(yīng)該是大寫,但大寫連續(xù)會破壞可讀性,如HTTPSFTP,你不知道是HTTPS FTP 還是 HTTP SFTP,所以采用如上圖綠色的方式來命名
不要使用前綴字母

匈牙利命名法中使用縮寫開頭的小寫駝峰命名法時,是因為當時編輯器無法很好幫助理解你的代碼,這樣命名法能夠很好的幫助你去理解代碼,現(xiàn)在dart語言中,編輯器可以很好的通過聲明等方式幫你理解你的代碼,故,不要使用前綴字母,如上圖綠色
規(guī)定代碼的順序
為了使文件保持整潔,我們有一個規(guī)定代碼順序。每個“部分”應(yīng)該用空行分隔。

保證dart的導(dǎo)入順序在所有其他包之前

保證帶包名的引用方式在相對路徑引用之前

首先import第三方的包
導(dǎo)入自己的包在后面一個單獨的部分

全部導(dǎo)入完畢后,再export 導(dǎo)出

每個部分按字母順序排序
格式化

使用dartfmt 程序來格式化代碼

單行長度為80字符
可讀性研究表明,長行文字難以閱讀,因為當你移動到下一行的開頭時,你的眼睛必須走得更遠。這就是報紙和雜志使用多列文本的原因。
如果你真的發(fā)現(xiàn)自己想要超過80個字符的行,我們的經(jīng)驗是你的代碼可能過于冗長而且可能更緊湊。主要罪犯通常是VeryLongCamelCaseClassNames。問問自己,“該類型名稱中的每個單詞是否告訴我一些關(guān)鍵或防止名稱沖突?”如果不是,請考慮省略它。
流程控制使用花括號
