Flutter/Dart中const和final关键字在Dart中的区别?

469 阅读3分钟

finalfinal 是应用于变量的关键字。

DartFlutter提供了使用final和const关键字分配给变量的常量值。

const变量在编译时知道其值,final变量在运行时知道其值。

让我们来看看这个例子的用法。

const date="2021-01-01"// 编译时常量 final date=CalculateDateFunction();// 运行时常量

让我们来看看更多的例子的比较

编译时常量与运行时常量

constfinal 值都只分配一次。编译时常量是编译时的常量值

让我们看一个compile-time constants

void main() {
  const number1;
  number1=45;
  print(number1);
}

上面的程序抛出了编译时错误,如下所示错误:The const variable ‘number1’ must be initialized.
常量 number1; ^^^^^^^Error: Can’t assign to the const variable ‘number1’. number1=45;

让我们看一个运行时常量的例子,也叫final 变量。用final 关键字声明一个变量。由于45的值是在运行时分配的,所以编译起来很顺利。

下面的程序编译和运行,输出45。

void main() {
  final number1;
  number1=45;
  print(number1); //45
}

以上 从这些程序中,区别在于

  • const 是编译时常量, 是运行时常量。final
  • 常量值只在编译时初始化,运行时分配是不可能的。
  • 两者都是一次性赋值的

final变量和const变量都不能为变量重新赋值

一旦变量被声明并初始化了它们的值,你可以用新的值重新分配这些变量。

重新赋值常量变量

void main() {
  const number1 = 123;
  print(number1);
  number1 = 45;
}

抛出错误Constant variables can’t be assigned a value. Reassigning final variable

void main() {
  final number1 = 123;
  print(number1);
  number1 = 45;
}

抛出错误The final variable ‘number1’ can only be set once.

从上面的程序来看,一旦给变量赋值,这两种类型都是不能重新赋值的。

类级成员常量

让我们看看如何声明类级成员常量。在类中声明的变量被称为成员变量。

类成员常量:

class Student {
     const id = 5;
}

它抛出了错误。只有静态字段可以被声明为常量。

类级常量总是用static 关键字来声明。

下面是有效的成员变量常量

class Student {
     static const id = 5;
}

类成员常量必须在声明时被初始化。

class Student {
  static const id;
}

上面的程序出现了错误。常量变量'id'必须被初始化

常量变量必须在同一行中初始化。

类成员常量final:最终成员变量用final 关键字声明。

有效的类最终变量例子

class Employee {
  final id = 15;
}

类的最终成员变量应该在同一行中初始化。

下面的程序抛出了一个错误。最终字段'id'没有被初始化。

class Employee {
  final id ;
}

类中有效的最终变量

class Employee {
  final id=4 ;
}

Dart和Flutter中final变量和const变量的区别

以下是dart和flutter中final和const变量声明的比较

最终变量常量变量
应用于变量变量
只赋值一次只分配一次值
运行时常量编译时常量
类别变量常量
用常量声明常量必须与
static关键字来使其成为常量
类常量在同一行中被初始化为值类常量在同一行中被初始化为数值