dart 中常量值有什么用?

Bew*_*lah 5 dart

如文档中所述:

\n\n
\n

const 关键字\xe2\x80\x99t 仅用于声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以有一个常量值。

\n
\n\n

有人可以解释一下常量值的使用吗?

\n

小智 10

这是一个简单的例子,我希望能够清楚地解释:

从两个变量和一个常量开始。

var foo = [10,11];
var bar = const [20,21];
const baz = [30,31];
Run Code Online (Sandbox Code Playgroud)

尝试修改一下foo,就成功了。

foo.add(12); // [10,11,12]
Run Code Online (Sandbox Code Playgroud)

尝试类似地修改bar,会出现错误,因为即使bar是变量,它的也被声明为常量,因此是不可变的。

bar.add(22); // ERROR!
Run Code Online (Sandbox Code Playgroud)

尝试重新分配不同的值bar。这是有效的,因为bar它本身没有被声明为常量。

bar = [40,41];
Run Code Online (Sandbox Code Playgroud)

现在,尝试bar再次修改 的值,这次它起作用了,因为它的新值不是常量。

bar.add(42)  // [40,41,42]
Run Code Online (Sandbox Code Playgroud)

尝试修改baz,会出现错误,因为baz本身被声明为常量,其值本质上是不可变的。

baz.add(32); // ERROR!
Run Code Online (Sandbox Code Playgroud)

尝试重新分配baz给新值,但失败,因为baz是常量,无法重新分配给新值。

baz = [50,51]; // ERROR!
Run Code Online (Sandbox Code Playgroud)


Doc*_*Doc 2

void main() {
  simpleUse();
  finalUse();
  constUse();
}

simpleUse() {
  print("\nsimple declaration");
  var x = [10];
  print('before: $x');
  x = [5];//changing reference allowed
  x.add(10);//changing content allowed
  print('after: $x');
}

finalUse() {
  print("\nfinal declaration");
  final x = [10];
  print('before: $x');

  // x = [10,20]; //nope changing reference is not allowed for final declaration

  x.add(20); //changing content is allowed
  print('after: $x');
}

constUse() {
  print("\nconst declaration");
  const x = [10];
  print('before: $x');

  // x = [10,20]; //nope -> changing reference is not allowed for final declaration

  // x.add(20);//nope -> changing content is not allowed
  print('after: $x');
}
Run Code Online (Sandbox Code Playgroud)

此外,变量是简单的值,例如x = 10;
值是枚举、列表、映射、类等的实例。