繁体   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