Dart Memo for Android Developers

聖騎士Wind發表於2020-06-14

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

於是就想著還是寫個備忘錄吧.

References

相關文章