Dart有3中注释:
// 行内注释
/*
多行注释
*/
/// 暂时不清楚用途的注释
Dart具有类型推断功能,可以明确指定变量类型,也可以使用 var 定义变量。但它是一种强类型语言,一旦类型被推断出来,就不能再改变类型了。
变量命名规则:由数字、字母、下划线和美元符号组成,不能以数字开头。
使用 const 或 final 定义常量, const 常量在定义时必须赋值, final 常量可以先定义而后赋值,且只能赋值一次。 final 不仅有 const 编译时常量的特性,它还是运行时常量,并且惰性初始化(在运行时第一次使用前初始化)。例如:
final DateTime date = new DateTime.now();
上面的 final 不能换为 const 。
可以用单引号或双引号定义字符串,使用三个单引号或双引号定义多行字符串。在字符串内使用 ${} 可以进行插值,如果只是一个变量可以省略花括号,插值一般优于字符串拼接。
只有 List 没有 Array ,但是 List 重载了 [] 操作符,可以像操作数组一样操作列表。没有指定类型的列表就像Java中没有指定泛型的列表可以持有所有 Object 一样,可以存放任意类型的元素。
List<String> s = <String>['first', 'second'];
使用 is 判断变量类型。
int a = 13; int b = 5; double c = a / b; // 2.6 int d = a ~/ b; // 2
??= 在左操作符为空时赋值, int.parse() 和 double.parse() 静态方法将字符串转换为整型或浮点型。
类似于JavaScript,可以通过设置 length 属性改变列表的长度,列表的很多东西使用属性来实现:
List list = []; print(list.isEmpty); print(list.isNotEmpty); print(list.reversed.toList());
iterable 使用()显示,集合能否保持顺序?
List 、 Set 都支持 forEach() 、 every() 、 any() 、 map() 方法,传入方法作为参数。 Map 支持 forEach() 和 map() 方法。
Map map1 = new Map(); map1['a'] = 1; map1['b'] = 2; Map map2 = map1.map((key, value) { return MapEntry(key + '-', value + 1); }); print(map2);
List 和 Set 的 map() 方法都返回 Iterable , Map 的此方法直接返回 Map 。
方法可以嵌套,可选参数(使用[]指定)和命名参数(使用{}指定)都可以指定默认值。在嵌套方法中引用父方法中的变量,并在父方法中将嵌套方法返回,则嵌套方法持有父方法中变量的引用,不会被回收,实现了父方法范围内的一个全局变量,这就叫闭包。
class Person { String _name; int _age; Person(this._name, this._age); get name { return this._name; } set name(newName) { this._name = newName; } } class Student extends Person { String stuid; Student(name, age, this.stuid) : super(name, age); }
getter和setter可以实现对私有域的获取和设置,同时可以重新设置名称,也可以实现用域访问的语法实现方法的效果。