这里是创建并初始化一个变量的例子:
var name = 'Bob';
变量保存的是引用。名字是 name 的变量包含一个指向值为 "Bob" 的字符串对象的引用。
名字为 name 的变量类型被推断为 String,但是你可以通过显示指定类型来改变这个行为。如果对象不限于一个单一类型,指定它为 Object 或 dynamic 类型。
dynamic name = 'Bob';
另一个选择是显式指定类型为它将会被推断的类型:
String name = 'Bob';
说明:对于局部变量,本篇文章遵守 代码风格推荐 使用 var,而不是类型声明。
默认值
未初始话的变量有一个初始值 null。即使是数值类型的变量初始值也是 null,因为数值——和 Dart 中其他所有类型一样——都是对象。
int lineCount; assert(lineCount == null);
说明:生产环境的代码会忽略 assert() 调用。在开发时,如果 condition 的结果是 false,assert(condition) 会抛出一个异常。详情请参阅 断言。
Final 和 const
如果你从不打算改变一个变量,请使用 final 和 const,而不是 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]; // 错误:常量不可以被赋值