Dart语言概览
- 一切皆对象,所有对象均继承自Object
- 虽然Dart是强类型语言,但是变量类型是可选的,因为Dart可以自动推断变量类型
- Dart支持泛型,List
- Dart支持顶层方法,也可以支持类方法或者对象方法,同时也可以在方法内部创建方法
- Dart支持顶部变量,也可以支持类变量或者对象变量
- Dart没有public、private等关键字,如果以(_)开头则代表私有变量
Dart定义变量
- 明确声明:变量类型 变量名称 = 赋值(定义的变量可以修改值,但是不能赋值其他类型)
- 类型推导:var/dynamic/const/final 变量名称 = 赋值(实际开发过程中不推荐使用dynamic,因为通过它定义的变量会关闭类型检查,即如有错误,编译期不报错,运行期直接crash)const编译期确定内容、final赋值期间确定
- 变量声明:var可以接收任何类型,但是一旦赋值类型便会确定。dynamic和object都可以在后期改变赋值类型。dynamic声明的对象编译器会提供所有可能的组合,而object声明的只可以使用object的属性和方法,所以dynamic容易引起运行时错误。
Dart数据类型
- 整数int、浮点数double,可表示范围取决于运行平台
- 字符串转数字 int.parse('111')
数字转字符串num.toString() - bool取值true和false,Dart不能判断非0即真或非空即真
- 字符串类型
- 单引号或者双引号创建字符串 三个单引号或者双引号表示多行字符串 ${}拼接
- Dart集合类型List数组/Set集合/Map字典
Dart函数 {}命名可选参数[]位置可选参数 只有可选参数才可使用默认值
- 词法作用域(({}))
- 所有函数都会返回值,如未指定则返回null
Dart运算符
- 除、整除、取模(/、~/、%)
- ??=赋值 相当于为null判断的三目运算符
- 条件运算符 expr1??expr2,expr1是null则返回expr2,否则返回expr1
- 级联语法为.. 表示同一对象连续操作
类和对象
- class关键字定义类
- Dart通常可以省略this但是有命名冲突时不可省略
Dart异步:Dart是单线程的
- Dart中存在事件队列以及微任务队列,微任务队列优先级高于事件队列
- 外部任务事件在事件队列中,如IO、计时器、点击、绘制事件等
微任务来源于Dart内部 - Dart单线程执行代码顺序:
- Dart入口为main函数,所以优先执行main函数代码
- main函数执行完毕后启动事件循环,启动后加载执行队列中任务
- 先进先出顺序执行微任务队列
- 先进先出顺序执行事件队列任务