在 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。