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类型的构造函数,这种类型的构造函数创建的对象是不可改变的。任何变量都可以有一个不变的值