类型判断和转换

Dart的类型判断和转换和Kotlin是一模一样。

var a;
if(a is Person){
    a.eat();
}
if(a is! Person){
    print('a is not person');
}

不安全的类型转换:

(a as Person).eat();

如果a不是Person类型或者是null,就会抛出异常。

非空赋值

普通的赋值是这样的:

a = 10;

但如果我们希望a是null的时候才赋值,如果不是空就保持原来的值,这种场景在实际开发中经常会遇到。使用??=就可以做到:

a ??= 10;

在Java中只能使用三元表达式了,Dart的这个语法还是非常实用的。

条件表达式

Dart也支持三元表达式:

String getName(String name) => name.isEmpty ? "lxj" : name;
print(getName(''));//lxj

条件表达式适用于bool类型的条件判断,如果希望左边的变量是空的话,才使用某个值。这个场景应该使用双问号??表达式:

String getName(String name) => name ?? "lxj";

只有name为空时才返回右边的值,在其他语言一般要用空检查或者三元表达式来做,比如:

String getName(String name){
   if(name == null){
       name = "lxj"
   }
   return name; 
}

级联表达式

级联表达式..可以让我们无需改动现有代码实现链式调用,在Java中需要每个方法返回当前对象才能实现,在Kotlin中可以使用with()函数来做到。

Person()
    ..name = "lxj"
    ..say()
    ..age = 10
    ..eat();

有个小限制是级联表达式的调用主体不能是void

var sb = StringBuffer();
sb.write('foo') //调用主体是个void对象,会编译报错
    ..write('bar');

改成这样就没问题了:

var sb = StringBuffer();
sb..write('foo') //sb不是void,可以进行级联调用
    ..write('bar');
更新时间: 4/27/2019, 8:54:35 PM