簡體   English   中英

在 Dart 中,'const' 參數有什么區別?

[英]In Dart, what's the difference between 'const' parameter?

padding: const EdgeInsets.all(25.0)
padding: EdgeInsets.all(25.0),

Dart demo中,大部分padding或者child加const,有什么優化嗎?

https://docs.flutter.io/flutter/widgets/Padding-class.html

讓我們考慮一下我們有這三行代碼:

1.const EdgeInsets.all(25.0)
2.const EdgeInsets.all(25.0)
3.const EdgeInsets.all(25.0)

1. 在第一行 EdgeInsets 類創建一個新對象並為其分配左、上、右、下的值並渲染給定的小部件,然后創建一個具有相同值的常量對象進行渲染,如果它在另一個地方找到。

2. 嘿,已經有一個具有這個值的對象,所以渲染它。

3. 嘿,已經有一個具有這個值的對象,所以渲染它。

現在,讓我們考慮這些場景:

1.EdgeInsets.all(25.0)
2.EdgeInsets.all(25.0)
3.EdgeInsets.all(25.0)

1. 在第一行,EdgeInsets 類創建一個新對象並為其分配左、上、右、下的值,並渲染給定的小部件。

2. 在第二行,EdgeInsets 類創建一個新對象並為其分配左、上、右、下的值並呈現給定的小部件。

3. 在第三行,EdgeInsets 類創建一個新對象並為左、上、右、下分配其值並呈現給定的小部件。

因此,通過使用 const,我們可以減少每次重新創建同一個對象並使用它的時間,相反,我們創建一個對象,然后在每次需要時重用它。

“const”在 Dart 中的含義更為復雜和微妙。 const 修改 您可以在創建集合時使用它,例如 const [1, 2, 3],以及在構造對象(而不是 new)時,例如 const Point(2, 3)。 在這里,const 意味着對象的整個深度狀態可以在編譯時完全確定,並且對象將被凍結並且完全不可變。

Const 對象有幾個有趣的屬性和限制:它們必須從可以在編譯時計算的數據創建。 const 對象無權訪問您需要在運行時計算的任何內容。 1 + 2 是一個有效的常量表達式,但 new DateTime.now() 不是。 它們是深刻的、可傳遞的不可變的。 如果您有一個包含集合的最終字段,該集合仍然可以是可變的。 如果您有一個 const 集合,則其中的所有內容也必須遞歸地為 const。 它們是規范化的 這有點像字符串實習:對於任何給定的 const 值,無論對 const 表達式求值多少次,都將創建並重用單個 const 對象。 換句話說:

源代碼在這里

const意味着對象的(這里的填充)整個深度狀態可以在編譯時完全確定,填充將被凍結並且完全不可變。

PS:請閱讀評論以獲得更好的解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM