跟java相比,Dart特有的关键字有:(25个)
关键字 | |||
---|---|---|---|
deferred | as | assert | dynamic |
sync* | async | async* | in |
is | await | export | library |
external | typedef | factory | operator |
var | part | const | rethrow |
covariant | set | yield | get |
yield * |
(一)变量的声明,可以使用 var、Object 或 dynamic 关键字。
(二)默认值
未初始化的变量的初始值为null(包括数字),因此数字、字符串都可以调用各种方法。
//测试 数字类型的初始值是什么?
int intDefaultValue;
// assert 是语言内置的断言函数,仅在检查模式下有效
// 在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)
assert(intDefaultValue == null);
print(intDefaultValue);//打印结果为null,证明数字类型初始化值是null
(三)Final and const
如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。
一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)
final的顶级或类变量在第一次使用时被初始化。
(四)Dart中支持以下特殊类型:
numbers 数字
strings 字符串
booleans 布尔
lists (also known as arrays) list集合(也称为数组)
maps map集合
runes (for expressing Unicode characters in a string)
字符(用于在字符串中表示Unicode字符)
symbols 符号
在 Dart 语言中,具有一系列相同类型的数据被称为 List 对象。
Dart List 对象类似JavaScript 语言的 array 对象。
var list = [1, 2, 3];
Dart list 对象的第一个元素的位置是0,最后个元素的索引是list.lenght - 1。
var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);
list[1] = 1;
assert(list[1] == 1);
Map 类型将keys 和 values 关联在一起。
keys 和 values 可以是任意类型的对象。
像其它支持Map 的编程语言一样,Map 的 key 必须是唯一的。
Map 对象的定义:
var gifts = {
// Keys Values
'first' : 'partridge',
'second': 'turtledoves',
'fifth' : 'golden rings'
};
var nobleGases = {
// Keys Values
2 : 'helium',
10: 'neon',
18: 'argon',
};
也可以使用Map 对象的构造函数 Map() 来创建Map 对象:
var gifts = new Map();
gifts['first'] = 'partridge';
gifts['second'] = 'turtledoves';
gifts['fifth'] = 'golden rings';
var nobleGases = new Map();
nobleGases[2] = 'helium';
nobleGases[10] = 'neon';
nobleGases[18] = 'argon';
添加新的key-value 对:
var gifts = {'first': 'partridge'};
assert(gifts['first'] == 'partridge');
检查key 是否在Map 对象中:
var gifts = {'first': 'partridge'};
assert(gifts['fifth'] == null);
使用.lenght 来获取key-value 对的数量:
var gifts = {'first': 'partridge'};
gifts['fourth'] = 'calling birds';
assert(gifts.length == 2);
factory
关键字的功能,当实现构造函数但是不想每次都创建该类的一个实例的时候使用。
指定一个库的前缀(Specifying a library prefix)
当引用的库拥有相互冲突的名字,可以为其中一个或几个指定不一样的前缀。
import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// ...
Element element1 = new Element(); // Uses Element from lib1.
lib2.Element element2 = new lib2.Element(); // Uses Element from lib2.
deferred
关键字 引用库的一部分
如果只需要使用库的一部分内容,可以有选择的引用。
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
为了实现延迟加载,必须使用deferred as 关键字
import 'package:deferred/hello.dart' deferred as hello;
然后在需要使用的时候调用loadLibrary()方法。
greet() async {
await hello.loadLibrary();
hello.printGreeting();
}
可以在代码中多次调用loadLibrary()方法。但是实际上它只会被执行一次。
使用延迟加载的注意事项:
类型定义(Typedefs)
在Dart 语言中,函数也是一个对象,和字符串或数字一样。
因为typedef只是简单的别名,通过用来检查函数类型
typedef int Compare(int a, int b);
int sort(int a, int b) => a - b;
main() {
assert(sort is Compare); // True!
}