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执行的规则:

  1. 规则一:Future 的执行顺序为Future的在 EventQueue 的排列顺序。类似于 JAVA 中的队列,先来先执行。
  2. 规则二:当任务需要延迟执行时,可以使用 new Future.delay() 来将任务延迟执行。
  3. 规则三: Future 如果执行完才添加 then ,该任务会被放入 microTask,当前 Future 执行完会执行 microTask,microTask 为空后才会执行下一个Future。
  4. 规则四:Future 是链式调用,意味着Future 的 then 未执行完,下一个then 不会执行。

 

async和await的使用条件和要求:
  • awaitasync 的使用需要满足以下条件:
    • await只能在async函数中出现。
    • async函数中可以出现多个await,每遇见一个就返回一个Future, 实际结果类似于用then串起来的回调。
    • async函数也可以没有await, 在函数体同步执行完毕以后返回一个Future

5.

dart 整除:~/

普通除:/

posted @ 2020-08-06 01:45  NeoZy  阅读(173)  评论(0编辑  收藏  举报