Dart中的变量声明方式,以及变量声明时使用的关键字

文章目录

变量

-创建一个变量并进行初始化:

var name = 'Bob';

其中var关键字表示接收任意类型的变量,但是和JavaScript不同的是,Dart中的var一旦接收了一次赋值,其声明的变量类型就确定下来了,不能再更改,且在同作用域中不能再次声明。

如下所示的代码在Dart中会报错:

testVariable() {
  var name = '张三';
  name = 22;
  print(name);
}
// 执行将报错:Error: A value of type 'dart.core::int' 
//can't be assigned to a variable of type 'dart.core::String'.

testVariable() {
  var name = '张三';
  var name = '李四';
  print(name);
}
// 执行将报错:Error: 'name' is already declared in this scope.

默认值

未初始化的变量默认值是 null。即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象,数字类型 也不例外。

int lineCount;
assert(lineCount == null);

提示: 在生产环境代码中 assert() 函数会被忽略,不会被调用。 在开发过程中, assert(condition) 会在非 true 的条件下抛出异常.

Final 和 Const

使用过程中从来不会被修改的变量, 可以使用 final 或 const,
Final 变量的值只能被设置一次;
Const 变量在编译时就已经固定 (Const变量 是隐式Final 的类型.) 最高级final 变量或类变量在第一次使用时被初始化。

提示: 实例变量可以是 final 类型但不能是 const 类型。 必须在构造函数体执行之前初始化 final 实例变量 —— 在变量声明中,参数构造函数中或构造函数的初始化列表中进行初始化。

创建和设置一个 Final 变量:

final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';

final 不能被修改:

name = 'Alice'; // Error: 一个 final 变量只能被设置一次。

如果需要在编译时就固定变量的值,可以使用 const 类型变量。 如果

Const变量是类级别的,需要标记为 static const。 在这些地方可以使用在编译时就已经固定不变的值,字面量的数字和字符串, 固定的变量,或者是用于计算的固定数字:

class TestConst {
  const int a = 3; // 报错:Only static fields can be declared as const.
  static const int b = 3; // 正确写法
}
const bar = 1000000; // 压力单位 (dynes/cm2)
const double atm = 1.01325 * bar; // 标准气压

Const关键字不仅可以用于声明常量变量。 还可以用来创建常量值,以及声明创建常量值的构造函数。 任何变量都可以拥有常量值。

var foo = const [];
final bar = const [];
const baz = []; // 等价于 `const []`

声明 const 的初始化表达式中 const 可以被省略。 比如上面的 baz。

非 Final , 非 const 的变量是可以被修改的,即使这些变量 曾经引用过 const 值。

foo = [1, 2, 3]; // 曾经引用过 const [] 常量值。
Const 变量的值不可以修改:

baz = [42]; // Error: 常量变量不能赋值修改。
  • final 或者const 变量的值不可以修改:
  • Dart中的字段实际上是一个匿名存储位置,结合了自动创建的getter和setter来读取和更新存储,还可以在构造函数的初始化列表中对其进行初始化。
  • final字段是相同的,只是没有设置器,因此设置其值的唯一方法是在构造函数初始化器列表中,并且此后无法更改值-因此是“ final”。
  • final和const不同在于,const变量关键是创建编译时常量值:在编译时已经知道所有字段值的对象,而不执行任何语句。const声明必须用const类型的值初始化。
  • const 变量同时也是final变量。如果 const 变量在类中,必须定义为 static const。static 表示成员在类本身上可用,而不是在类的实例上
  • const 关键字不仅仅只用来定义常量,还可以用来创建不变的值,还能定义const类型的构造函数,这种类型的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值