flutter - Dart 中静态变量和 const 变量的区别
问题描述
检查这两个示例:
static const
课堂内:
class SessionStorage {
static const String _keySessionExist = 'storage.key';
}
只是const
课外:
const String _keySessionExist = 'storage.key';
class SessionStorage {
}
static const
在类内部有一个变量或只是在它的外部声明为 const之间有什么区别或影响Dart
吗?- 也许编译的代码会改变?
- 哪个性能更高?
- 如果变量是文件私有的,我们应该遵循哪一个?
解决方案
cons 的声明必须使用const
,您必须将其声明为static const
而不仅仅是 const。
static
, final
, 和const
在 Dart 中表示完全不同的东西:
static
表示成员在类本身而不是类的实例上可用。这就是它的全部含义,它不用于其他任何事情。static 修改成员。
final
表示单一赋值:最终变量或字段必须有一个初始化器。一旦分配了一个值,最终变量的值就不能更改。final 修改变量。
const
在 Dart 中具有更复杂和微妙的含义。const 修改值。您可以在创建集合时使用它,例如 const [1, 2, 3],以及在构造对象(而不是 new)时,例如 const Point(2, 3)。在这里,const 意味着对象的整个深度状态可以完全在编译时确定,并且对象将被冻结并且完全不可变。
const 对象有几个有趣的属性和限制:它们必须从可以在编译时计算的数据创建。const 对象无权访问您在运行时需要计算的任何内容。1 + 2 是有效的 const 表达式,但 new DateTime.now() 不是。它们是深刻的、传递性的不可变的。如果您有一个包含集合的最终字段,则该集合仍然可以是可变的。如果您有一个 const 集合,则其中的所有内容也必须是 const 递归的。它们是规范化的。这有点像字符串实习:对于任何给定的 const 值,无论 const 表达式被计算多少次,都将创建并重用一个 const 对象。换句话说:
getConst() => const [1, 2];
main() {
var a = getConst();
var b = getConst();
print(a === b); // true
}
我认为 Dart 在保持语义和关键字清晰明确方面做得很好。(曾经有一段时间 const 用于 const 和 final。这很令人困惑。)唯一的缺点是,当你想指示一个成员是单赋值的并且在类本身上时,你必须同时使用这两个关键字:静态决赛。
还:
我建议你看看这个问题
推荐阅读
- typescript - Vue 3 TypeScript - 模块“XX”在本地声明“YY”,但未导出
- python - Python Flask - 想要显示“Hello [Firstname]
- android - 如何循环遍历要写入本地存储的文件列表?
- python - Pycharm 中 Colab 到 Pycharm 库的导入问题
- javascript - NodeJS Express API 调用结构异步事件
- flutter - 如何限制我的 ListView.builder 中的项目数?
- python - python为什么要重用默认值字典?
- php - 如何在 PHP 中反转此类代码
- python - 如何更快地加载 api 响应并在 pandas 中使用它在 django 中进行分析?
- apache-karaf - Opendaylight Karaf 在安装引导功能时出错