在 Dart 中,final 和 const 有什么区别?
Dart 语言中,我们可以使用两种方式来定义一个不可改变的变量(即为常量):const 和 final。
const
const 只有用来修饰在编译期间就能确定值的不可变变量,我们称之为编译期常量。
const myAge = 33;
myAge = 20; // 编译错误:Constant variables can't be assigned a value.
final
final 通常用来修饰在编译期间还不能确定它的值的不可变变量,我们称之为运行期常量。
final currentDate = DateTime.now();
currentDate = DateTime(2022, 1, 18); // 编译错误:The final variable 'currentDate' can only be set once.
总结:
- const 只有用来修饰在编译期间就能确定值的不可变变量。
- final 用来修饰在编译期间不能确定它的值,我们只能在程序运行后才能确定它的值的不可变变量。
- 当然 final 也用来修饰在编译期间就能确定值的不可变变量。但是如果编译期间就能确定值的话,我们应该使用 const,因为编译器会在编译前对 const 修饰变量进行内在优化。
- 如果你不能确定要使用 const 还是 final 来定义一个常量时,一个简单规则:优先使用 const,如果编译器报错,那就使用 final。