基本语法,先从变量开始。
Dart 变量声明基础
声明一个字符串:
代码语言:javascript复制main() {
String str = 'hello wold';
print(str);
}
同样可以使用const ,fiinal,var 来声明,由于不确定类型,会和TS、Swift、Kotlin一样类型推导
str 会被推导成字符串,然而并不会像js的var一样,dart 也是强类型语言。
默认值
未初始化的变量默认值是 null。即使变量是数字 类型默认值也是 null,因为在 Dart 中一切都是对象,数字类型 也不例外。
代码语言:javascript复制int lineCount;
assert(lineCount == null);
提示:语法检查不会让你使用null 的变量
dynamic 字段
dynamic 是动态的,类似于TS 和 Swift any 语法。编译期不做检查,在运行时决定类型。
代码语言:javascript复制main() {
// var str = 'hello wold';
// str = 3;
// print(str);
dynamic a = 3;
a = '33';
print(a);
}
dynamic 灵活但存在风险,少用谨慎使用。
常量final const 比较
final 和 const 都可以修饰变量,达到不可以更改的目的。
const
如果需要在编译时就固定变量的值,可以使用 const 类型变量。 如果 Const 变量是类级别的,需要标记为 static const。 在这些地方可以使用在编译时就已经固定不变的值,字面量的数字和字符串, 固定的变量,或者是用于计算的固定数字:
修饰变量更改
const 修改变量,然后更改,会报错。
代码语言:javascript复制main() {
const name = 'zhangsan';
name = 'lisi';
}
报错提示:Constant variables can't be assigned a value.
如果不初始化是否可以?
答案是不可以,const 必须初始化。
final
创建和设置一个 Final 变量:
代码语言:javascript复制final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
如果不初始化是否可以?
代码语言:javascript复制main() {
final name;
name = '小明';
}
修饰变量更改
代码语言:javascript复制main() {
final name;
name = '小明';
name = '小红';
}
Final 和 Const 比较总结
使用过程中从来不会被修改的变量, 可以使用 final 或 const, 而不是 var 或者其他类型, Final 变量的值只能被设置一次; Const 变量在编译时就已经固定 (Const 变量 是隐式 Final 的类型.) 最高级 final 变量或类变量在第一次使用时被初始化。
const 在编译时确定,相同内容优先取内存已有地址。
代码语言:javascript复制main() {
List a1 = [1, 2, 3];
List a2 = [1, 2, 3];
print(identical(a1, a2));
final a3 = [1, 2, 3];
final a4 = [1, 2, 3];
print(identical(a3, a4));
const a5 = [1, 2, 3];
const a6 = [1, 2, 3];
print(identical(a5, a6));
Array a7 = const Array.multi([1, 3, 4]);
Array a8 = const Array.multi([1, 3, 4]);
print(identical(a7, a8));
}
打印结果:
代码语言:javascript复制false
false
true
true
static 修饰静态变量
使用 static 关键字实现类范围的变量和方法。
静态变量(类变量)对于类级别的状态是非常有用的:
代码语言:javascript复制class Queue {
static const initialCapacity = 16;
// ···
}
void main() {
assert(Queue.initialCapacity == 16);
}
静态变量只到它们被使用的时候才会初始化。