什么是Dart?为什么使用它?
Dart 是一个由谷歌开发的通用编程语言,后来被 Ecma (Ecma-408)批准为标准。它用于构建 web、服务器、桌面和移动应用程序。 Dart 是一种面向对象的、类定义的、垃圾回收语言 ,使用C 样式的语法可以随意地转换为 JavaScript。 它支持接口、 mixin、抽象类、具体化泛型、静态类型等。
Dart部分特性
- Dart是AOT(Ahead Of Time)编译的,可编译成快速,可预测的本地代码
- Dart可以JIT(Just In Time)编译,开发周期快,为Flutter热重载提供基础
- Dart可以轻松创建60fps运行的流畅动画和转场
- Dart的声明式编程布局,易于阅读和可视化,不需要单独的声明式布局语言,如:XML,JSX
- Dart非常易于学习,具有静态和动态语言,编程人员都熟悉的特性
Dart重要概念
- 所有东西都是对象,无论是变量,数字,函数,null等都是对象,所有对象都Object类的子类
- Dart语言是强类型编程,一旦确定类型,则不可改变变量类型,编译时会进行语法检查,但Dart允许弱类型语言式的编程
- Dart代码在运行前解析,指定数据类型和编译时常量,可以提高运行速度
- Dart语言的统一入口是main函数
- Dart的私有特性是在变量或者函数名前面加上下划线 _
- Dart 支持async/await异步处理
Dart关键字
Dart内置库
包名 | 描述 |
---|---|
dart:async | 异步编程,提供Future,Stream类 |
dart:collection | 集合 |
dart:convert | 不同类型的字符编码解码 |
dart:core | Dart语言核心功能,内置类型 |
dart:html | 网页开发用到的库 |
dart:io | 文件读写,IO相关 |
dart:math | 数字常量及函数,随机算法等 |
dart:svg | 事件和动画矢量图支持 |
Dart类型系统
Dart 是类型安全的: 它结合使用静态类型检查和运行时检查,以确保变量的值总是与变量的静态类型匹配。 尽管类型是强制的,但是类型声明是可选的,因为 Dart 会在编译时执行类型推断。
面向对象
类定义及接口 Dart 是一个面向对象编程语言,同时支持基于 Mixin 的继承机制。 每个对象都是一个类的实例,所有的类都继承于Object,基于 Mixin 的继承 意味着每个类(Object 除外)都只有一个超类,一个类的代码可以在其他多个类继承中重复使用,从而达到多重继承的效果。
class Person{
String name;
int age;Person(this.name,this.age);}abstractclass Animal{
void eat();}
基本数据类型
- 核心概念 Dart中所有类型都是对象,都继承自Object类,上述类型的父类都是Object, 在Dart中null类型也继承自Object类。
基本语法
变量声明
/// 定义基本类型 , 使用var关键字进行类型定义时 ,定义并初始化时,后续赋值只能是相同类型。 /// 使用var 定义,不初始化 , 则后续可以任意类型赋值, 最终类型是dynamic类型,dynamic类型,不会检测成员,Object定义的变,会检测对象成员。 var variable = '12’; /// 使用确定类型定义变量 , String 类型 , 使用确定类型赋值必须是相同类型 String name = ‘zeno’;
一切变量的初始化都是null,包括bool类型初始化也是null
常量声明
/// 使用const 定义的常量是不可变的, 需要定义并赋值,常量定义的集合,都是只读的,特性会传递到子元素,在内存中会复用相同内容对象 const PI = 3.1454567; /// 使用final 定义的变量, 只能赋值一次,只作用在自身 final DE = 123231313;
集合
List
var ls =List();var ls =[];
Ls2.add(‘one’);
Ls2.addAll([‘1’,’2’,’3’]);
Ls2.add(‘two’);
Ls2.remove(‘one’);
Map
var personInfo = Map();var personInfo ={};
personInfo[‘name’]= ‘zeno’;
personInfo[‘age’]=18;
枚举
枚举类型是一种特殊的类,通常用来表示相同类型的一组常量。使用关键字enum定义枚举。枚举的每一个值都有一个index属性,index从0开始计数。枚举不能被继承,不能创建实例。
enum ResponseState{
Success,
Error,
Failure
}
时间处理
DateTime 对象代表某个时刻。时区是 UTC 或者 本地时区。
DateTime.now();DateTime(2019,3,3);
DateTime.parse(‘2019-03-0320:30:00’);
DateTime.fromMillisecondsSinceEpoch(1551616200000);
异常
Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且你不要求捕获任何异常。 Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者 Error 的对象。
throw new FormatException('Expected at least 1 section’);throw 'Out of llamas!’;try{}catch(){}finally{}