Dart 学习
2020-07-02 本文已影响0人
虚拟J
- 任何保存在变量中的都是一个对象, 并且所有的对象都是对应一个类的实例, 无论是数字,函数和 null 都是对象,所有对象继承自 Object 类。
2.在 Dart 2 中,new 关键字是可选的
3.是 Set 还是 Map ? Map 字面量语法同 Set 字面量语法非常相似。 因为先有的 Map 字母量语法,所以 {} 默认是 Map 类型。 如果忘记在 {} 上注释类型或赋值到一个未声明类型的变量上, 那么 Dart 会创建一个类型为 Map<dynamic, dynamic> 的对象。
- Symbol 在 Dart 中是一种反射概念(创建了一个唯一索引的内存地址),而在 JavaScript 中则是创建唯一标识的概念。
5.运算符:
- ?? 运算符,例:t??'test' 是 t!= null ? t : 'test' 的缩写(如果赋值是基于判定是否为 null,考虑使用 ??。赋值是根据布尔值, 考虑使用 ?:)
- 级联运算符 (..)可以实现对同一个对像进行一系列的操作
6.函数:箭头函数、匿名函数、作用域、闭包、高阶函数、参数可选等基本上和 JS 都一样。但由于 Dart 是强类型,因此在声明函数的时候可以增加一个返回类型。
7.类:和 Java 的基本都差不多。
使用 get 和 set 关键字实现 Getter 和 Setter ,能够为实例创建额外的属性(Getter 和 Setter 是用于对象属性读和写的特殊方法。所有实例变量都生成隐式 getter 方法, 非 final 的实例变量同样会生成隐式 setter 方法)。
8.有一个泛型的概念很重要,需要去了解明白
Dart 的运行原理
在 Dart 中同样是单线程(这点与 JS 中存在类似的机制原理)执行,其次也包含了两个事件队列,一个是微任务事件队列,一个是事件队列。
- 微任务队列:包含有 Dart 内部的微任务,主要是通过 scheduleMicrotask 来调度。
- 事件队列:包含外部事件,例如 I/O 、 Timer ,绘制事件等等。
Dart 执行的逻辑过程:
- 首先是执行 main 函数,并生产两个相应的微任务和事件任务队列
- 判断是否存在微任务,有则执行,执行完成后再继续判断是否还存在微任务,无则判断是否存在事件任务
- 如果没有可执行的微任务,则判断是否存在事件任务,有则执行,无则继续返回判断是否还存在微任务
- 在微任务和事件任务执行过程中,同样会产生微任务和事件任务,因此需要再次判断是否需要插入微任务队列和事件任务队列
在这里进行 Dart 核心库功能的查询。