Dart语言学习-变量

变量

Dart里面万物皆对象,包括变量类型、函数。

Dart 没有 byte、char 和 float。final 跟 Java 里的 final 一样,表示一个运行时常量,运行时赋值过后就不再改变,

对应的const 表示编译时常量,编译的时候值就确定了。

var是类型推断,类似于swift。

Objective-C的初始化默认会给每个属性赋一个空值,比如nil或者0,Dart默认的变量初始化为null,包括int类型。

如果变量用下划线修饰,那表示是一个私有变量。

String

类似于oc的NSString和Java的string,不可变对象。

List

数组,初始化方式:var list = List<int>();添加元素:list.add(1);list.add(2);

字面量创建list:var list2 = list[1,2];没有元素的list:var list3 = list<int>[];

Dart的for循环和oc的for in类似:

for(var x in list) {

print(x);

}

Set

集合:var set = Set<String>();

set.add('foo');

set.add('bar');

assert(set.contains('foo'));

Map

字典:

var map = Map<String, int>();

// 添加

map['foo'] = 1;

map['bar'] = 3;

// 修改

map['foo'] = 4;

// 对应的 key 不存在时,返回 null

if (map['foobar'] == null) {

print('map does not contain foobar');

}

var map2 = const {

'foo': 2,

'bar': 4,

};

var map3 = <String, String>{};

dynamic 和 Object

dynamic和object都可以接收任意类型的参数,但是object只能调用object支持的方法

dynamic可以调用任何方法,但是调用不存在的方法是,会抛出NoSuchMethodError错误。

例如:dynamic obj = 'string';

obj['foo'] = 4; // 运行时抛出NoSuchMethodError

Dart提供了运行时类型检测:is(类似于oc的isKindOfClass)

dynamic obj = map<string,int>();

if (obj is map<string,int>) {

obj['foo'] = 42;

}

语句

Dart里常见的 if/else,do while,while 和 switch 都没有什么特殊之处。switch 也支持 String 和 enum。

函数

Dart的函数和Java的类似,但是没有重载,这一点和oc一样,不存在参数不同函数名相同的函数。

构造函数就是一个与类同名的函数,关键字 this 是指当前的,只有在命名冲突时有效,否则dart会忽略处理

在dart里面,子类不能继承父类的构造函数,如果你没有声明构造函数,默认有构造函数,默认构造函数没有参数,调用父类的无参构造函数。

子类不能继承父类的构造函数,dart使用默认构造函数 ,声明的属性都会被赋初值nil或者0。

异常

与Java类似,不同的是Dart可以抛出任何类型的对象