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可以抛出任何类型的对象

 
 
posted @ 2018-04-25 15:04  黑暗的咏叹  阅读(706)  评论(0编辑  收藏  举报