学习资源
- dartpad 使用 DartPad 可以体验 Dart 的大部分语言功能
打印与调试
在 dart 中没有 console 对象,使用 print 函数来
print('hello, world!');
书写规范:使用;来定义,开始的时候还是要写。以后怎么样可以根据项目规范来处理。
认识 dart
// 定义一个函数
printInteger(int aNumber) {
print('The number is $aNumber.'); // 打印到控制台。
}
// 应用从这里开始执行。
main() {
var number = 42; // 声明并初始化一个变量。
printInteger(number); // 调用函数。
}
变量
- var 变量
- const 常量
- final 不变量
dart 是有类型系统的,但是这里我们暂且不考虑类型。不考虑类型的时候,会有隐式的类型推论。
const 定义的常量,我们修改了之后,我们会得到这样的错误:
void main() {
var a = 'a';
const aa = 'aa';
aa = '_aa';
print(a);
print(aa);
for (int i = 0; i < 5; i++) {
print('hello ${i + 1}');
}
}
Error compiling to JavaScript:
main.dart:6:3:
Error: Can't assign to the const variable 'aa'.
aa = '_aa';
^^
Error: Compilation failed.
const 的错误是❌是不能正确的分配的问题。final d定义的变量会提示 Error: 一个 final 变量只能被设置一次。
他们表现都是不能重新分配,但是什么不同呢?
- 实例变量可以是 final 类型但不能是 const 类型。
- 必须在构造函数体执行之前初始化 final 实例变量 —— 在变量声明中,参数构造函数中或构造函数的初始化列表中进行初始化。
内置类型
- Number
- int
- double
- String
- Boolean
- bool
- List (也被称为 Array)
- Map
- key-value
- Set
- Rune (用于在字符串中表示 Unicode 字符)
- Symbol 通过字面量 Symbol ,也就是标识符前面添加一个 # 号,来获取标识符的 Symbol 。(Symbol 可能你永远也不会用...)
函数
函数也是对象,函数不像其他语言需要 function/func 字段声明。
- 主函数 main
- 函数可以作为参数,与JavaScript一致
- 匿名函数
- 作用域
- 闭包(能编译成js, 这一点就很好理解了)
- 测试与断言 assert
- 隐式的返回值
运算符
- 算术
- 关系
- 类型
- 赋值
- 逻辑
- 按位
- 移位
- 条件
- 级联
- ()
- []
- .
- ?.
条件
- if-else
- for
- while/do-while
- continue/break
- switch/case
- assets 只有这一点是不同的。
异常
- try
- catch
- finally
类 class
基于类和 mixin 继承机制的面向对象的语言. 每个对象都是一个类的实例,所有的类都继承于 Object(这一点和 JavaScript 相似).
- 构造函数,就是一个类, new 关键字是可选的
- 扩展类,
- 重写修饰器
- 枚举类型
- Mixin 是复用类代码的一种途径, 复用的类可以在不同层级,之间可以不存在继承关系。通过 with 后面跟一个或多个混入的名称。
- 静态属性和方法
泛型
泛型其实就是约束类型的,将一个变量或者一批变量约束为某种类型,泛型会根据泛型参数的不同,约束不同的类型。
库
- 使用 import 导入库
- 使用 export 语句创造库
异步
- async/await
- Future
- Stream
生成器
- 生成器
可调用类
- call
隔离区
- Isolates
Typedefs
是类型别名,类似于 TypeScript 的 type 关键字
元数据
meta-data, 使用 @ 修饰符来进行修饰。
注释
类型
类型书写的位置,在变量的前面。