一些記述的定義:
... :代表任何可以通過編譯的語法。 (dart沒有這個語法。)
Dart:
進入點: void main() { ... }
資料概念:
- 跟javascript一樣,所有的資料都是物件。
- 變數宣告若不給初始值,都是null。是的,int / bool也一樣...
- 變數宣告不可在函式或是類別宣告之外
基本資料型態:
- num:數字。小數與整數是繼承此資料型態而來的
- int:整數
isNaN存在,但不可能為true。 - double:小數
isNaN存在,但不可能為true。還有 isInfinite跟 isNegative 兩個參數,用來判斷被0除的狀況。
1.0 == 1 跟 0.0 == -0.0,dart的規定是true。 詳細的性質解說請參考官方文件 - bool:真偽值 true / false
- String:頭字「S」必須大寫
可用陣列操作取單字:String str="abc"; str[1]; // "b" - null:變數宣告之後未設值的資料型態
- var :此參數的型態,在設值的時候依設值的型態決定。這也是宣告參數的時候不加上型態宣告的預設型態。但是之後不可再設定不同資料型態的值。
- dynamic:可以任意更換資料型態。缺點:不能使用該物件的extension method
- Object:物件。頭字「O」必須大寫。與var跟dynamic的差異:可使用「Object」的函式跟內部參數。若使用非「Object」的內部參數,編譯會出warning。使用非「Object」的函式,編譯會出錯。
物件的「相等」,之後會介紹。 - Function:函式也可以作為參數。頭字「F」必須大寫。
基本資料型態,宣告時必須指定資料型態。
函式傳入資料:
函式回傳資料:- covariant:傳入參數型態的修飾字。代表傳入參數可以變動資料型態
- void:代表該函式無回傳值。只用在function / method的回傳宣告
靜態:
- static:在類別內宣告,同類別物件會共享此參數。
函式定義static,會成為class共享函式。因為沒有實體化,函式內不能使用this。
常數:
- const: 宣告時必須設值
- final:宣告時可以不設值,之後只能設一次值。常數宣告之後若有取值動作,在取值之前必須有確切的設值動作,不然編譯會失敗。
dart官方建議可以定義為常數,就儘量定義為常數,可以增加程式碼編譯最佳化的效率。
資料型態互轉與判斷:
(以下使用全小寫字代表變數。例如「int」代表整數變數,「str」代表字串變數,「obj」代表物件變數)
資料型態 | string | int | double | bool | |
---|---|---|---|---|---|
string | int.parse() str.parseInt() | double.parse() | |||
num | num.toString() | ||||
int | int.toString() | int != 0 | |||
double | double. toStringAsFixed() | double.toInt() | |||
bool | bool.toString() | bool ? 1 : 0 | |||
dynamic | dynamic.toString() | ||||
Object | obj.toString() | ||||
var | var.toString() | ||||
空字串:str.isEmpty //注意:是property(物件的參數),不是function。
字串相加需注意,其他資料型態必須先轉成字串才能相加。就算是int / bool也一樣...
字串插值: '${expression}' //大括號裡面可以使用一行程式碼做資料處理。若只是從單一變數取值,可以省略大括號
資料型態取得: obj.runtimeType //注意:是property(物件的參數),不是function。
資料型態判定: obj is ClassName,回傳bool值。
強制資料型態轉換:obj as ClassName,若不可轉換(轉換來源obj非轉換目標的相關class),編譯會出錯