首先,附上鏈接:https://dart.dev/guides/language/effective-dart/style。
用Flutter寫了一個(gè)項(xiàng)目,也迭代了一個(gè)版本,代碼評(píng)審也開了兩次,雖說(shuō)還是不夠完善,但是可以慢慢來(lái),慢慢總結(jié)、慢慢優(yōu)化!
一、標(biāo)識(shí)符
Dart中有三種標(biāo)識(shí)符:
UpperCamelCase:大寫名字,每個(gè)單詞的第一個(gè)字母要大寫,包括第一個(gè)。
lowerCamelCase:小寫名稱,每個(gè)單詞的第一個(gè)字母要大寫,除了第一個(gè)是小寫的,即使它是首字母縮略詞。
lowercase_with_underscores:僅使用小寫字母,首字母縮寫,并使用_分隔單詞。
1、類,枚舉類型,typedef和類型參數(shù)應(yīng)將每個(gè)單詞的首字母大寫(包括第一個(gè)單詞),并且不使用分隔符。
class SliderMenu { ... }
class HttpRequest { ... }
typedef Predicate<T> = bool Function(T value);
包括打算在元數(shù)據(jù)注釋中使用的類
class Foo {
const Foo([arg]);
}
@Foo(anArg)
class A { ... }
@Foo()
class B { ... }
如果注釋類的構(gòu)造函數(shù)不帶任何參數(shù),則可能要為其創(chuàng)建一個(gè)單獨(dú)的lowerCamelCase常量。
const foo = Foo();
@foo
class C { ... }
與類型一樣,擴(kuò)展名應(yīng)大寫每個(gè)單詞的首字母(包括第一個(gè)單詞),并且不使用分隔符。
extension MyFancyList<T> on List<T> { ... }
extension SmartIterable<T> on Iterable<T> { ... }
2、(lowercase_with_underscores)請(qǐng)使用來(lái)命名庫(kù),程序包,目錄和源文件:一些文件系統(tǒng)不區(qū)分大小寫,因此許多項(xiàng)目要求文件名全部為小寫。使用分隔符允許名稱仍以該形式可讀。使用下劃線作為分隔符可確保名稱仍然是有效的Dart標(biāo)識(shí)符,如果該語(yǔ)言以后支持符號(hào)導(dǎo)入,則可能會(huì)有所幫助。

3、(lowerCamelCase)類成員,頂級(jí)定義,變量,參數(shù)和命名參數(shù)應(yīng)將除第一個(gè)單詞以外的每個(gè)單詞的首字母大寫,并且不使用分隔符。


4、縮寫詞和縮寫詞的首字母大寫要長(zhǎng)于單詞之類的兩個(gè)字母。
大寫的首字母縮寫詞可能很難讀懂,多個(gè)相鄰的首字母縮寫詞可能導(dǎo)致名稱不明確。例如,給定一個(gè)以開頭的名稱HTTPSFTP,則無(wú)法分辨它是指HTTPS FTP還是HTTP SFTP。
為避免這種情況,首字母縮寫詞和縮寫詞都像普通單詞一樣大寫。
例外: IO(輸入/輸出)之類的兩個(gè)字母的首字母大寫:IO。另一方面,ID(標(biāo)識(shí))之類的兩個(gè)字母的縮寫仍像常規(guī)單詞一樣大寫Id。

5、不要使用前綴字母。
BCPL時(shí)代出現(xiàn)了匈牙利表示法和其他方案,當(dāng)時(shí)編譯器沒(méi)有做很多事情來(lái)幫助您理解代碼。由于Dart可以告訴您聲明的類型,范圍,可變性和其他屬性,因此沒(méi)有理由在標(biāo)識(shí)符名稱中編碼這些屬性。
