Dart关键字及类型

跟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 关键字。

  1. 使用Object或dynamic关键字
    调用的变量name包含对String值为“张三” 的对象的引用。
    name推断变量的类型是String,但可以通过指定它来更改该类型。
    如果对象不限于单一类型(没有明确的类型),请使用Object或dynamic关键字
  2. 显式声明将被推断的类型
    比如String,int等。

(二)默认值

未初始化的变量的初始值为null(包括数字),因此数字、字符串都可以调用各种方法。

//测试 数字类型的初始值是什么?
int intDefaultValue;
// assert 是语言内置的断言函数,仅在检查模式下有效
// 在开发过程中, 除非条件为真,否则会引发异常。(断言失败则程序立刻终止)
assert(intDefaultValue == null);
print(intDefaultValue);//打印结果为null,证明数字类型初始化值是null

(三)Final and const

如果您从未打算更改一个变量,那么使用 final 或 const,不是var,也不是一个类型。
一个 final 变量只能被设置一次;const 变量是一个编译时常量。(Const变量是隐式的final。)
final的顶级或类变量在第一次使用时被初始化。

  • final的值只能被设定一次。
  • const 是一个编译时的常量。( Const variables are implicitly
    final.)

(四)Dart中支持以下特殊类型:

  • numbers 数字

  • strings 字符串

  • booleans 布尔

  • lists (also known as arrays) list集合(也称为数组)

  • maps map集合

  • runes (for expressing Unicode characters in a string)
    字符(用于在字符串中表示Unicode字符)

  • symbols 符号

Lists 类型

在 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);

Maps 类型

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

factory 关键字的功能,当实现构造函数但是不想每次都创建该类的一个实例的时候使用。

deferred

指定一个库的前缀(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 关键字 引用库的一部分
如果只需要使用库的一部分内容,可以有选择的引用。

  • show 关键字:只引用一点
  • hide 关键字:除此之外都引用
// Import only foo.
import 'package:lib1/lib1.dart' show foo;

// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;

延迟加载库(Deferred loading a library)

为了实现延迟加载,必须使用deferred as 关键字

import 'package:deferred/hello.dart' deferred as hello;

然后在需要使用的时候调用loadLibrary()方法。

greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

可以在代码中多次调用loadLibrary()方法。但是实际上它只会被执行一次。

使用延迟加载的注意事项:

  • 延迟加载的内容只有在加载后才存在。
  • Dart 隐式的将deferred as改为了deferred as namespace。

Typedefs

类型定义(Typedefs)
在Dart 语言中,函数也是一个对象,和字符串或数字一样。

因为typedef只是简单的别名,通过用来检查函数类型

typedef int Compare(int a, int b);

int sort(int a, int b) => a - b;

main() {
  assert(sort is Compare); // True!
}

你可能感兴趣的:(Flutter)