变量

优质
小牛编辑
129浏览
2023-12-01

这里是创建并初始化一个变量的例子:

var name = 'Bob';

变量保存的是引用。名字是 name 的变量包含一个指向值为 "Bob" 的字符串对象的引用。

名字为 name 的变量类型被推断为 String,但是你可以通过显示指定类型来改变这个行为。如果对象不限于一个单一类型,指定它为 Objectdynamic 类型。

dynamic name = 'Bob';

另一个选择是显式指定类型为它将会被推断的类型:

String name = 'Bob';

说明:对于局部变量,本篇文章遵守 代码风格推荐 使用 var,而不是类型声明。

默认值

未初始话的变量有一个初始值 null。即使是数值类型的变量初始值也是 null,因为数值——和 Dart 中其他所有类型一样——都是对象。

int lineCount;
assert(lineCount == null);

说明:生产环境的代码会忽略 assert() 调用。在开发时,如果 condition 的结果是 false,assert(condition) 会抛出一个异常。详情请参阅 断言。

Final 和 const

如果你从不打算改变一个变量,请使用 finalconst,而不是 var 或者一个类型名。Final 变量只可以被设置一次;而 const 变量是编译期常量。(Const 变量是隐式 final 的。)一个 final 的顶级变量或者类变量在首次被使用时初始化。

说明:实例变量只可以是 final 的,不可以是 const 的。Final 实例变量必须在构造函数体开始前被初始化——在变量声明时、通过构造函数参数或者在构造函数的 初始化列表 中。

这里是创建并设置一个 final 变量的例子:

final name = 'Bob'; // 没有类型声明
final String nickname = 'Boddy';

你不可以改变一个 final 变量的值:

name = 'Alice'; // 错误:一个 final 变量只可以被设置一次

对那些你想要作为编译期常量的变量使用 const。如果这个 const 变量是类级别的,使用 static const 标识它。在你声明的时候,设置变量的值为编译期常量比如数字、字符串字面量、另一个常量或者常量数值的算术运算结果。

const bar = 1000000; // 压力单位(达因/cm2)
const double atm = 1.01325 * bar; // 标准大气压

Const 关键词不仅可以声明常量。你还可以使用它创建常量值,也可以声明创建常量值的构造函数。任何变量都可以拥有一个常量值。

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

你可以忽略常量声明中初始化表达式中的 const,像上面的 baz 一样。详情请参阅 不要重复使用 const

你可以改变一个非 final 且非 const 变量的值,即使它有一个常量值。

foo = [1, 2, 3]; // 之前是 const []

你不可以改变一个常量的值:

baz = [42]; // 错误:常量不可以被赋值

要了解更多使用 const 创建常量值的内容,请参阅 List、Map 和