Dart語言一些語法特點和編程規範. 本文適合: 日常使用Kotlin, 突然想寫個Flutter程式的Android程式員. ...
Dart Memo for Android Developers
Dart語言一些語法特點和編程規範.
本文適合: 日常使用Kotlin, 突然想寫個Flutter程式的Android程式員.
Dart語言
完整的請看A tour of the Dart language
- 創建對象可以不用
new
. -> 並且規範不讓用new
, lint會報錯. - 聲明變數可以用
var
, 也可以用具體類型如String
. 不變數用final
, 常量用const
. - 沒有訪問修飾符, 用
_
來表示私有: 文件級別. - 字元串可以用單引號
'
. - 語句結尾要用
;
. - 創建數組可以用:
var list = [1, 2, 3];
. assert()
常用來斷定開發時不可能會出現的情況.- 空測試操作符:
??
. - 過濾操作符:
where
. - 兩個點
..
表示鏈式調用. dynamic
說明類型未指定.- 除了throw異常, 還可以throw別的東西, 比如字元串.
函數
- 函數返回值在函數最開頭, 可以不標. -> 但是規範會建議標註返回值.
bool isNoble(int atomicNumber) {
return _nobleGases[atomicNumber] != null;
}
=>
箭頭符號, 用來簡化一句話的方法.
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
構造函數
- 構造函數
{}
表示帶名字, 參數可選, 若要必選加上@required
.
const Scrollbar({Key key, @required Widget child})
- 構造函數名可以是
ClassName
或者ClassName.identifier
. - 空構造函數體可以省略, 用
;
結尾就行:
class Point {
double x, y;
Point(this.x, this.y);
}
這裡會初始化相應的變數, 也不用聲明具體的參數類型.
- 有
factory
構造, 可以用來返回緩存實例, 或者返回類型的子類:
factory Logger(String name) {
return _cache.putIfAbsent(name, () => Logger._internal(name));
}
非同步代碼
Future<String> lookUpVersion() async => '1.0.0';
Future checkVersion() async {
var version = await lookUpVersion();
// Do something with version
}
編程規範類
完整的規範在這裡: Effective Dart.
有一些Good和Bad的舉例, 這裡僅列出比較常用的幾項.
- 文件名要蛇形命名:
lowercase_with_underscores
. 類名:UpperCamelCase
. - 對自己程式的文件, 兩種import都可以(package開頭或者相對路徑), 但是要保持一致.
- Flutter程式嵌套比較多, 要用結尾的
,
來幫助格式化.
本文緣由
年初的時候學了一陣子Flutter, 寫了各種大小demo. 結果隔了兩個月之後, 突然心血來潮想寫個小東西, 打開Android Studio, 首先發現創建Flutter程式的按鈕都不見了. (估計是Android Studio4.0升級之後Flutter的插件沒跟上).
接著用命令行創建了工程, 打開之後稍微整理了一下心情, 然後就....懵逼了.
突然不知道如何下手.
巨集觀的東西還記得, 要用什麼package, 基本常用的幾個Widget都是啥, 但是微觀的, 忘了函數和數組都是咋定義的了.
這種懵逼的狀態令我很憤怒, 果然是上年紀了嗎, 無縫切換個語言都不行.
於是就想著還是寫個備忘錄吧.