2.認識Dart中的對象和變量

目錄傳送門:《Flutter快速上手指南》先導篇
html

萬物皆對象

在 Dart 中,萬物皆對象,包括函數。git

全部的對象都繼承自 Object 類。github

而且,全部對象的默認值都是 nullapi

void main() {
  var test_var;
  print("value = $test_var");
}


>>>
value = null
複製代碼

如何聲明變量

  1. 使用 var 關鍵字數組

    var name = 'Bob';
    複製代碼

    使用 var 能夠聲明一個不定類型的變量,但當該變量被第一次賦值時,該變量類型就被肯定。bash

    今後,你不能再改變該變量的類型,任何錯誤的嘗試,你都會獲得編譯器的報錯。函數

    eg:post

    name = 1;
    
    
    >>>
    A value of type 'int' can't be assigned to a variable of type 'String'. 複製代碼
  2. 使用 dynamicObjectui

    這兩個傢伙具備一樣的效果!spa

    它們均可以達到聲明一個可變類型的變量的效果,即你能夠隨時使用該變量來指向任何一種類型的對象。

    固然,編譯器是不會告訴你你犯了任何的錯誤,它只會讓你的代碼被順利的編譯 😄

    確切來講,dynamic 其實是一個關鍵字,而 Object 之因此有一樣的效果,徹底是由於任何對象類型,都源自於它。

    因此你看,它兩具備一樣的效果,但具備不一樣的原理。

    eg:

    void main() {
      dynamic name = "Bob";
      print("value = $name");
      name = 1;
      print("value = $name");
    }
    
    
    >>>
    value = Bob
    value = 1
    複製代碼

    換成 Object 也會獲得一樣的結果。

  3. 使用具體對象聲明

    String name = 'Bob';
    複製代碼

    對此,我想我不用有太多的解釋。

  4. 使用 finalconst

    若是你但願一個對象被初始化後,不能再被修改,那麼你應該使用這兩個關鍵字。

    final name = 'Bob';
    final String nickname = 'Bobby';
    
    const bar = 1000000;
    const double atm = 1.01325 * bar;
    複製代碼

    到如今爲止,它兩看起來沒什麼差異。

    const 厲害的地方在於,它是編譯時常量的關鍵字,你在編譯期就須要肯定它的初始值。

    而 final 只會在運行時纔要求肯定初始值。

    const 除了能夠聲明一個不可變的常量外,還能夠用來建立常量數組。

    void main() {
      var userInfo = const [];
      final githuber = const ['CoorChice'];
      const nums = [1, 2, 3];
    
      userInfo = ['bob', 2];
      print(userInfo);
    }
    
    
    >>>
    [bob, 2]
    複製代碼

    第一項之所可以被改變,是由於咱們定一個是個 const [] 常量數組。

    而剩餘兩項初始化後不能被改變對象的值,finalconst 都是被做爲常量關鍵字被使用的,而被它們修飾的變量,不能再修改其值。

擴展

  • ??= 操做符

    考慮如下例子:

    b ??= value;
    複製代碼

    若是 b 爲 null,就會把 value 賦值給 b。

    若是 b 不爲 null,則仍然保持原值。

目錄傳送門:《Flutter快速上手指南》先導篇

如何找到我?

傳送門:CoorChice 的主頁

傳送門:CoorChice 的 Github

相關文章
相關標籤/搜索