dart语言基础之2
1. dart中is用来判断数据类型:int a=1; assert(a is num);//无报错 所以只要是is后面的类型的子类就行
然后相反的不是xx类型是用is!来判断,比如:
int a=1;
assert(a is! double); //无报错
as则是先判断是不是后面类型的子类,如果是就继续执行,否则报错:
int a=1;
print((a as num).runtimeType); //无报错,因为int是num的子类
print((a as double).runtimeType); //报错,因为int不是double的子类
2. 长字符串用''' xxxxxx'''' 三引号括起来。
3 var、Dynamic、Object都可以表示任意数据类型,但var定义的变量类型是不能改的,dynamic和object可以。
dynamic和object定义的变量类型都可以改,但区别是object会做类型检查,比如写了个object x='sasa';x.sb(); 会报错的!但用dynamic声明就不会报错!例子如下:
void main() { var str = "hello world"; print(str.runtimeType);//String print(str);//hello world str=1; // 编译报错,编译时会进行数据类型推断,var定义的类型是不可变的 dynamic mic = "hello world";//编译时不会揣测数据类型,但是运行时会推断 print(mic.runtimeType);//String print(mic);//hello world mic.foo();//静态类型检查不会报错,但是运行时会crash,因为mic并没有foo()方法。(建议大家在编程时不要直接使用dynamic,它会使语法检查失效) mic=1; // 正常运行,不会出错 print(mic.runtimeType);//int 说明类型是可变的 print(mic);//1 Object object = "hello world"; print(object.runtimeType);//String print(object);//hello world object=1; print(object.runtimeType);//int 说明类型是可变的 print(object);//1 object.foo(); //静态类型检查会运行报错会报错 }
4.
void testFuture() { Future f1 = new Future(() => print('f1')); Future f2 = new Future(() => null); Future f3 = new Future.delayed(Duration(seconds: 1) ,() => print('f2')); Future f4 = new Future(() => null); Future f5 = new Future(() => null); f5.then((_) => print('f3')); f4.then((_) { print('f4'); new Future(() => print('f5')); f2.then((_) { print('f6'); }); }); f2.then((m) { print('f7'); }); print('f8'); }
运行结果:
解释:dart是单线程模型,分为event queue和microtask queue,每次运行时先考察microtask微任务队列里是否为空,如果不为空就先循环把微任务队列里的任务执行完,再去event queue里选一个任务去做。做完之后再回去看微任务队列是否为空。当然不带future的直接执行语句比它们两个都更快。
future执行的规则:
- 规则一:Future 的执行顺序为Future的在 EventQueue 的排列顺序。类似于 JAVA 中的队列,先来先执行。
- 规则二:当任务需要延迟执行时,可以使用 new Future.delay() 来将任务延迟执行。
- 规则三: Future 如果执行完才添加 then ,该任务会被放入 microTask,当前 Future 执行完会执行 microTask,microTask 为空后才会执行下一个Future。
- 规则四:Future 是链式调用,意味着Future 的 then 未执行完,下一个then 不会执行。
async和await的使用条件和要求:
-
-
-
-
5.
dart 整除:~/
普通除:/
进击的小🐴农