基本資料類型
Dart中支援以下資料類型:
- Numbers
- Strings
- Booleans
- List(也就是數組)
- Maps
num有2個子類型,int和double.
控制流程
循環,if esle,switch case,try catch等等和java相差不大,有些細微差異,可以在使用時深入了解。
final和const
const和final定義的都是常量,值不能改變,并且在聲明的時候就必須初始化。
但是也有細微差别,簡單來說
- const定義的是編譯時常量,隻能用編譯時常量來初始化
- final定義的常量可以用變量來初始化
final time = new DateTime.now(); //Ok
const time = new DateTime.now(); //Error,new DateTime.now()不是const常量
關于類和對象
dart中所有的基礎類型、函數、類等等都是繼承自Object,預設值是null,可以調用自有的方法。
類的定義使用class關鍵字,建立對象使用new關鍵字,建立不可變對象需要使用const關鍵字
每個字段都對應一個隐式的Getter和Setter,你可以使用get和set關鍵字擴充功能,如果字段為final或者const的話,那麼它隻有一個getter方法
抽象類
在Dart中類和接口是統一的,類就是接口。如果你想重寫部分功能,那麼你可以繼承一個類,如果你想實作某些功能,那麼你也可以實作一個類。
使用abstract關鍵字來定義抽象類,并且抽象類不能被執行個體化,抽象方法不需要關鍵字,直接以分号 ; 結束即可。
注意:當使用 implements的時候,子類需要重寫父類的成員變量和方法,包括私有的成員和方法.
函數
函數和java成員方法有些差別,但是基本寫法差不多,下面是簡單的例子
String sayHello(String name){
return 'Hello $name!';
}
當沒有指定傳回值時,預設傳回null,如果能推斷類型,可以省略傳回類型。但是建議寫入參類型和傳回類型,這樣友善閱讀和維護。
如果函數體隻有一條表達式,可以使用箭頭文法,=>expr;
于是上面的代碼可以寫成這樣:
sayHello(name) => 'Hello $name!';
還可以定義匿名函數:var sayHello = (name)=>'Hello $name!';
函數閉包
核心就是了解函數也是對象,可以作為函數的傳回類型。
Function makeSubstract(num n){
return (num i) => n - i;
}
void main(){
var x = makeSubstract(5);
print(x(2));
}
可選參數
dart中支援命名可選參數和位置可選參數,但是不能同時混用。
- 命名可選參數使用大括号{},預設值用冒号:
- 位置可選參數使用方括号[],預設值用等号=
注意:命名可選參數在sdk1.2.1之後可以使用冒号‘:’和等号‘=’來指派預設值。
函數别名
可以使用typedef來定義函數,這樣可以使用這個名字來關聯該函數。
typedef int Compare(int a, int b);
int sort(int a, int b) => a - b;
main() {
assert(sort is Function);
assert(sort is Compare);
}
總結
從基礎文法和使用習慣來看和java差别很小,當然更深入的差别有待繼續學習。