2022年6月8日水曜日

Dart 語法測試 + 一點點flutter (未完稿)

一些記述的定義:

... :代表任何可以通過編譯的語法。 (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」必須大寫。
參數宣告語法:  int i = 0; 
基本資料型態,宣告時必須指定資料型態。

 
函式傳入資料:
  • covariant:傳入參數型態的修飾字。代表傳入參數可以變動資料型態
函式回傳資料:
  • void:代表該函式無回傳值。只用在function / method的回傳宣告

靜態:

  • static:在類別內宣告,同類別物件會共享此參數。
    函式定義static,會成為class共享函式。因為沒有實體化,函式內不能使用this。

常數:

  • const: 宣告時必須設值
  • final:宣告時可以不設值,之後只能設一次值。常數宣告之後若有取值動作,在取值之前必須有確切的設值動作,不然編譯會失敗。

dart官方建議可以定義為常數,就儘量定義為常數,可以增加程式碼編譯最佳化的效率。

 

資料型態互轉與判斷:
(以下使用全小寫字代表變數。例如「int」代表整數變數,「str」代表字串變數,「obj」代表物件變數)

資料型態stringintdoublebool
string
int.parse()
str.parseInt()
double.parse()


numnum.toString()



intint.toString()

int != 0

doubledouble.
toStringAsFixed()
double.toInt()



boolbool.toString()bool ? 1 : 0



dynamicdynamic.toString()




Objectobj.toString()




varvar.toString()










空字串:str.isEmpty    //注意:是property(物件的參數),不是function。

字串相加需注意,其他資料型態必須先轉成字串才能相加。就算是int / bool也一樣...

字串插值: '${expression}'  //大括號裡面可以使用一行程式碼做資料處理。若只是從單一變數取值,可以省略大括號

資料型態取得: obj.runtimeType   //注意:是property(物件的參數),不是function。

資料型態判定:  obj is ClassName,回傳bool值。

強制資料型態轉換:obj as ClassName,若不可轉換(轉換來源obj非轉換目標的相關class),編譯會出錯