Dart中的static、final、const【譯】

"static", "final", "const" 在Dart中意味著完全不同的東西:

  • "static" 表示成員在類本身上可用,而不是在類的實例上。 這就是它的意思,并沒有用于其他地方。 static修飾成員。

  • "final" 表示單一賦值:final變量或字段必須初始化。 一旦賦值,就不能改變final變量的值。 final修飾變量

  • "const" 的含義在Dart中有點復(fù)雜和微妙。 const修飾。 您可以在創(chuàng)建集合時使用它,例如const [1,2,3] ,以及構(gòu)造對象(代替new),比如const Point(2,3)。這里,const意味著對象的整個深度狀態(tài)可以在編譯時完全確定,并且對象將被凍結(jié)并完全不可變。

  • const對象有幾個有趣的屬性和限制:

    1. 必須根據(jù)可在編譯時計算的數(shù)據(jù)創(chuàng)建它們。 const對象無法訪問運行時需要計算的任何內(nèi)容。 1 + 2是一個合法的const表達式,但new DateTime.now()不是(合法的const表達式)。
    2. 它們是深層不能改變的。 如果你有包含集合的final字段,則該集合仍然可變。 如果你有一個const集合,那么它中的所有東西也必須是遞歸的const。
    3. 它們是規(guī)范化的。 這有點像字符串內(nèi)聯(lián):對于任何給定的const值,無論const表達式被計算多少次,都將創(chuàng)建并重用單個const對象。 也就是說:
    getConst() => const [1, 2]; 
    main() { 
      var a = getConst(); 
      var b = getConst(); 
      print(a === b); // true 
    } 
    
  • 我認(rèn)為Dart在保持語義和關(guān)鍵字清晰明確方面做得非常好。 (曾經(jīng)有一段時間將const用于const和final。這令人困惑。)唯一的缺點是,當(dāng)你想指出一個單一賦值的成員和類本身時,你必須使用兩個關(guān)鍵字:static final。

原文出處

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 目錄 參考資料 語言特性 關(guān)鍵字 變量與常量 數(shù)據(jù)類型 運算符 operators 控制流程語句 異常 Excep...
    GuoDongW閱讀 185,911評論 22 341
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,652評論 18 399
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 30,224評論 8 265
  • 輕語文閱讀 204評論 0 0
  • 盛夏已至,光年流轉(zhuǎn)之外到處都是熱。 我就想,到底怎樣的故事能讓人過目不忘? 是你的愛? 還是世間的悲? 最怕的竟是...
    范小羊閱讀 185評論 0 0

友情鏈接更多精彩內(nèi)容