Flutter開發Dart極速入門 (變量)

變量

變量的聲明

  • var

  • dynamic

  • Object

    使用示例

      var data1;	// 沒有定義初始值, 可以變成任意類型
      data1 = 'str';
      data1 = 1;
    
      dynamic data2;
      data2 = 'str';
      data2 = 1;
    
      Object data3;
      data3 = 'str';
      data3 = 1;
    
  • 區別

    • var 如果沒有初始值, 可以變成任意類型
    • var 有初始值類型就會被鎖定 (聲明一個初始化的變量之後, 變量的類型不可再改變)
      var variable1 = 'str';	//聲明瞭初始化變量
    //  variable1 = 1;	// 編譯不通過, variable1的類型已經被推斷爲了string
    
    • dynamic 和 Object聲明一個初始化的變量之後, 變量的類型仍然可改變
    • dynamic:動態任意類型,編譯階段不檢查類型, 如調用了該對象的一個不存在的函數, 編譯仍可通過, 運行會報錯
    • Object:動態任意類型,編譯階段檢查檢查類型

變量的默認值

  • 沒有初始化的變量自動獲取一個默認值: null
  • 一切皆對象, 對象的默認值爲null (*一切: 包括bool, int等初始值均爲null)

final 和 const

  • 共同點

    1. 變量的類型可以忽略

      final str = "str"; 
      
    2. 無法修改其值

      //  str = 'str1'; // a final variable, can only be set once.
      
    3. 無法和var同時使用

      //  final var fvar = 'str'; // 編譯不通過: remove var
      
  • 區別

    1. 類級別常量使用static const

      //  如系統的 DateTime 類中:
      //  static const int monday = 1;
      //  static const int tuesday = 2;
      
    2. const 常量的值可以使用其他const 常量來初始化

      const width = 1;
      const height = 2;
      const square = width * height;
      
    3. const 賦值 申明可省略

      const List conList = [1,2,3]; // = const [1,2,3]
      
    4. 可以更改非final 非 const 變量的值, 即使他曾經擁有const值

      var list = const [1,2,3];
      list = [1];	// 可以正常編譯
      
    5. const導致的不可變性是可傳遞的

        final fList = [1,2,3];
        const cList = [1,2,3];
        fList[1] = 0; // fList[1,0,3]
      //  cList[1] = 0; // Cannot modify an unmodifiable list
        print(fList);
        print(cList);
      
    6. 相同的const常量在內存中不會重複創建

      const con1 = [1,2,3];
      const con2 = [1,2,3];
      print(identical(con1, con2)); // identical用於檢查兩個引用是否指向同一對象: true
      final fin1 = [1,2,3];
      final fin2 = [1,2,3];
      print(identical(fin1, fin2)); // false
      
    7. const 的賦值需要是編譯時常量

        final DateTime dateTime1 = DateTime.now();  // 運行時才能獲取其值
      //  const DateTime dateTime2 = DateTime.now();  // 編譯不通過: const variables must be initialized with a constant value.
        const sum = 1+2;  // 正確用法: 編譯時常量
      

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章