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都是啥, 但是微觀的, 忘了函式和陣列都是咋定義的了. 這種懵逼的狀態令我很憤怒, 果然是上年紀了嗎, 無縫切換個語言都不行.
於是就想著還是寫個備忘錄吧.