Dart 常量:final
和 const
修饰符
Dart 提供了两种修饰符来定义常量:final
和 const
。
1. const
:编译时常量
const
修饰的变量在声明时必须立即赋值,并且其值在编译时必须是已知的。const
声明的常量在编译时被解析,且值不可更改。
const PI = 3.14159; // 正确:在声明时赋值
// PI = 123.1243; // 错误:const 常量的值不可修改
print(PI); // 输出:3.14159
2. final
:运行时常量
final
修饰的变量可以在声明时不立即赋值,但一旦赋值后,其值不可更改。final
是运行时常量,支持惰性初始化,即在运行时第一次使用前才初始化。
final PI = 3.14159; // 正确:在声明时赋值
// PI = 124214.214124; // 错误:final 常量的值不可修改
print(PI); // 输出:3.14159
区别
final
可以在声明时不赋值,但只能赋值一次。final
是运行时常量,而const
是编译时常量。
示例代码
以下是 final
和 const
的使用示例代码:
void main() {// final 常量final a = DateTime.now(); // 正确:final 可以在声明时赋值print(a); // 输出当前时间// const 常量const PI = 3.14159; // 正确:const 必须在声明时赋值// PI = 123.1243; // 错误:const 常量的值不可修改print(PI); // 输出:3.14159// final 的惰性初始化final b; // 声明时可以不赋值b = 10; // 在运行时赋值print(b); // 输出:10// const 的限制// const a = DateTime.now(); // 错误:const 必须是编译时常量
}
代码说明
-
const
和final
的区别:const
必须在声明时赋值,且值在编译时必须已知。final
可以在声明时不赋值,但只能赋值一次,且支持运行时初始化。
-
使用建议:
- 如果变量的值在编译时已知且不会改变,使用
const
。 - 如果变量的值在运行时确定且不可更改,使用
final
。
- 如果变量的值在编译时已知且不会改变,使用
-
代码风格:
- 使用注释清晰地说明每一步的作用,便于理解和学习。
通过上述内容,您可以更好地理解 Dart 中 final
和 const
的使用方式及其区别。