const
和final
: const变量是编译时常量(const变量隐式为final变量),它在编译过程中初始化的并占用内存空间。final变量在首次使用时被初始化。=> expr
是一种简写,相当于{ return expr; }
.=>
有时候被称为箭头语法.String say(String from, String msg, [String device])
中[]
包含的是可选参数注意下面的addBy
Function makeAdder(num addBy) {
return (num i) => addBy + i;
}
void main() {
// Create a function that adds 2.
var add2 = makeAdder(2);
// Create a function that adds 4.
var add4 = makeAdder(4);
assert(add2(3) == 5);
assert(add4(3) == 7);
}
- 除法需要注意的地方:
assert(5 / 2 == 2.5); // Result is a double
assert(5 ~/ 2 == 2); // Result is an int
- b为null的时候赋值
b ??= value;
expr1 ?? expr2
如果expr1为非null,则返回其值; 否则,计算并返回expr2的值。..
级联符号是对上一个方法的返回值进行操作的continue跳转
var command = 'OPEN';
switch (command) {
case 'OPEN':
continue nowClosed;
case 'CLOSED':
print('closed');
break;
nowClosed:
default:
print('default');
}
- is
class A{
}
class B extends A{
}
A a = A();
B b = B();
if(b.runtimeType == A) {
print('b.runtimeType is A');
}
else {
print('b.runtimeType is not A');
}
if(b is A) {
print('b is A');
}
else {
print('b is not A');
}
-
Dart的垃圾回收也采用了多生代算法,新生代在回收内存时采用了“半空间”算法,触发垃圾回收时Dart会将当前半空间中的“活跃”对象拷贝到备用空间,然后整体释放当前空间的所有内存:
整个过程中Dart只需要操作少量的“活跃”对象,大量的没有引用的“死亡”对象则被忽略,这种算法也非常适合Flutter框架中大量Widget重建的场景。
await关键字必须在async函数内部使用
@protected : 只子类可用,同文件内没限制。