Dart 类型几个知识点

一、mixins
mixins是一个前端很火的概念,是一个重复使用类中代码的方式。

class A {
	a() {
			print("A's a()");
		}
}
class B {
	b() {
			print("B's b()");
		}
}

class C = A with B; // 使用with关键字,表示类C是由类A和类B混合而构成

void main() {
	C c = new C();
	c.a();  // A's a()
    c.b();  // B's b()
}

二、异步
Dart提供了类似ES7中的async await等异步操作,这种异步操作在Flutter开发中会经常遇到,比如网络或其他IO操作,文件选择等都需要用到异步的知识。 async和await往往是成对出现的,如果一个方法中有耗时的操作,你需要将这个方法设置成async,并给其中的耗时操作加上await关键字,如果这个方法有返回值,你需要将返回值塞到Future中并返回,如下代码所示:

Future<String> getNetData() async {
  http.Response res = await http.get("http://www.baidu.com");
  return res.body;
}

main() {
  getNetData().then((str) {
    print(str);
  });
}

三、变量
1、var
var 声明变量并自动推断类型

Dart 中,有一个变量可以指定类型声明,如下
String s = 's1';
int i = 2;
double f = 2.2;

这些,也完全可以使用 var 来处理,让编译器自动推断;
var s = 's1'; // type String
var i = 2;    // type int
var f = 2.2;  // type double

2、dynamic

无论是 var 还是 int 等类型声明的变量,再次赋值其他类型会报错,如下:
var s = 's1';
s = 1;

如果使用 dynamic 申明的变量,则可以进行此操作
dynamic s = 's1';
print(s);   // 值为 s1
s = 1;
print(s);   // 值为 1

3、const 与 final

共同点:
void main(){
  const f = 'hello';   // 将 const 改为 final,同样的结果
  print(f);
  f = 'world';   // const 与 final 都会报错,原因是对象内部的 setter 不存在
}

不同点:
1、const 隐式的 final,不单单可以约束变量,也可以约束变量的值。
void main(){
  final f = <int>[1];  
  f.add(2);
  print(f); 
}
使用 final ,打印正常,结果为 [1, 2]
若把 final 改为 const ,则会报错
因此,若定义固定的 List(或 map 或其他类型等),明确后续不再改变它,那么 const 就有用了
可以看出,final 与 const,类似于 python 的 浅复制 与 深复制

2、const 为编译时常量,final 为运行时常量
const dt = const DateTime.now();  //错误,因为时间是在运行时候确定的
final dt = DateTime.now();        //正确,运行时有确定的值

3、内存中重复创建
const a1 = [11 , 22];
const a2 = [11 , 22];
print(identical(a1, a2));//true

final a1 = [11 , 22];
final a2 = [11 , 22];
print(identical(a1, a2));//false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值