Flutter Dart中静态变量和常量变量之间的差异
检查以下两个示例: 类内的静态常量: 类会话存储{ 静态常量字符串_keysionexist='storage.key'; } 只是班外的一个常量: 常量字符串_keysionexist='storage.key'; 类会话存储{ } 在类内部有一个静态常量变量,或者在Dart中将它声明为类外部的常量,这两者之间有什么区别或含义吗? 也许编译后的代码会改变? 哪一个性能更好? 如果变量对文件是私有的,我们应该遵循哪一个?Flutter Dart中静态变量和常量变量之间的差异,flutter,dart,compilation,constants,Flutter,Dart,Compilation,Constants,检查以下两个示例: 类内的静态常量: 类会话存储{ 静态常量字符串_keysionexist='storage.key'; } 只是班外的一个常量: 常量字符串_keysionexist='storage.key'; 类会话存储{ } 在类内部有一个静态常量变量,或者在Dart中将它声明为类外部的常量,这两者之间有什么区别或含义吗? 也许编译后的代码会改变? 哪一个性能更好? 如果变量对文件是私有的,我们应该遵循哪一个? cons的声明必须使用const,您必须将其声明为静态const,而不仅仅
cons的声明必须使用const,您必须将其声明为静态const,而不仅仅是const 静态、最终和常量在Dart中表示完全不同的内容: 静态意味着成员在类本身而不是在类的实例上可用。这就是它的全部含义,它不用于任何其他用途。静态修改成员 final表示单个赋值:final变量或字段必须具有初始值设定项。赋值后,最终变量的值不能更改。final修改变量 const在Dart中的含义更为复杂和微妙。常量修改值。您可以在创建集合(如常量[1,2,3])时使用它,也可以在构造对象(而不是新对象)时(如常量点2,3)使用它。在这里,const意味着对象的整个深层状态可以在编译时完全确定,并且对象将被冻结并且完全不可变 常量对象有几个有趣的属性和限制: 它们必须从可在编译时计算的数据中创建。const对象无权访问运行时需要计算的任何内容。1+2是有效的常量表达式,但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。这令人困惑。唯一的缺点是,当您希望在类本身上指示单个赋值的成员时,必须同时使用两个关键字:static final
也:
我建议你看看这个问题
cons的声明必须使用const,您必须将其声明为静态const,而不仅仅是const 静态、最终和常量在Dart中表示完全不同的内容: 静态意味着成员在类本身而不是在类的实例上可用。这就是它的全部含义,它不用于任何其他用途。静态修改成员 final表示单个赋值:final变量或字段必须具有初始值设定项。赋值后,最终变量的值不能更改。final修改变量 const在Dart中的含义更为复杂和微妙。常量修改值。您可以在创建集合(如常量[1,2,3])时使用它,也可以在构造对象(而不是新对象)时(如常量点2,3)使用它。在这里,const意味着对象的整个深层状态可以在编译时完全确定,并且对象将被冻结并且完全不可变 常量对象有几个有趣的属性和限制: 它们必须从可在编译时计算的数据中创建。const对象无权访问运行时需要计算的任何内容。1+2是有效的常量表达式,但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。这令人困惑。唯一的缺点是,当您希望在类本身上指示单个赋值的成员时,必须同时使用两个关键字:static final
也:
我建议你看看这个问题
在类内部有一个静态常量变量,或者在Dart中将它声明为类外部的常量,这两者之间有什么区别或含义吗?
明显的区别在于,静态版本必须与cl一起引用
屁股的名字。除了名称解析的更改之外,名称解析应该是相同的
也许编译后的代码会改变?
哪一个性能更好?
它们都是编译时常量。应该没有什么区别
如果变量对文件是私有的,我们应该遵循哪一个?
如果您想要Dart库(通常指文件)专用的内容,请在其前面加上前缀u。不管它是全局的还是静态的
在类内部有一个静态常量变量,或者在Dart中将它声明为类外部的常量,这两者之间有什么区别或含义吗?
明显的区别是静态版本必须使用类名引用。除了名称解析的更改之外,名称解析应该是相同的
也许编译后的代码会改变?
哪一个性能更好?
它们都是编译时常量。应该没有什么区别
如果变量对文件是私有的,我们应该遵循哪一个?
如果您想要Dart库(通常指文件)专用的内容,请在其前面加上前缀u。不管它是全局的还是静态的。你说应该没有任何区别。但我怎么能确定呢?我来自java,编译后的文件仍然可读,所以我可以看到我的代码在编译后的工件中是如何变化的,在dart中有什么方法可以做到这一点吗?你说应该没有任何区别。但我怎么能确定呢?我来自java,在java中编译的文件仍然可读,所以我可以看到我的代码在编译的工件中是如何变化的,在dart中有什么方法可以做到这一点吗?