📜  Dart – 常量(1)

📅  最后修改于: 2023-12-03 15:30:22.134000             🧑  作者: Mango

Dart - 常量

在 Dart 中,常量是指值不可改变的变量。Dart 中有两种类型的常量:编译时常量和运行时常量。编译时常量是在编译时就已经确定的常量,而运行时常量的值是在运行时才能确定的常量。

编译时常量

编译时常量可以在编译时确定其值,因此在运行时不需要计算其值。Dart 中的编译时常量包括数字、字符串、布尔值、符号以及 null 值。

以下是一些使用 const 关键字定义的编译时常量的示例:

const int a = 5;
const double b = 3.14;
const String c = 'Hello, World!';
const bool d = true;
const symbol e = #symbol;
const int f = null;

在上述示例中,变量 a、b、c、d、e、f 都是编译时常量。它们的值在编译时就被确定下来了。可以使用 const 构造函数来创建编译时常量。例如:

const List<int> numbers = const [1,2,3];

在上述示例中,numbers 是一个编译时常量列表,其值在编译时就被确定下来了。

运行时常量

运行时常量需要在运行时才能计算出其值。在 Dart 中,使用 final 关键字定义运行时常量。

以下是一个使用 final 关键字定义的运行时常量的示例:

final DateTime now = new DateTime.now();

在上述示例中,now 是一个运行时常量,但是它的值需要在运行时才能确定,因为它需要调用 new DateTime.now() 来计算出当前时间。

常量替换

Dart 编译器会自动替换代码中使用 const 关键字定义的编译时常量。例如:

const int a = 5;
const int b = 6;
final int c = a + b;

在上述示例中,编译器会在编译时将 c 的值计算出来,并将其替换成一个编译时常量。因此,实际上的代码是:

const int a = 5;
const int b = 6;
const int c = 11;
总结

Dart 中的常量有两种类型:编译时常量和运行时常量。编译时常量在编译时就被确定下来了,而运行时常量需要在运行时才能确定。在 Dart 中,可以使用 const 和 final 关键字分别定义编译时常量和运行时常量。Dart 编译器会自动将使用 const 关键字定义的编译时常量替换成实际的值。