最近这几天注意到Kotlin.试了一下,把现在的Java项目翻译成Kotlin,感觉很爽.算是浅尝辄止.见笑.
第一:Null Safety
这个语法糖很适合写Android程序.
比如
if (a != null){
return a.b;
}
else{
return null;
}
上面这个很简单,可以直接用一个三元运算符解决.而如果是下面这种情况呢
a.b.c.d
java就要写成这种形式
if (a == null){
return null;
}
if (a.b == null){
return null;
}
if (a.b.c == null){
return null;
}
return a.b.c.d
而如果用Kotlin,可以直接
a?.b?.c?.d
有没有一行更比多行强的感觉?
第二: ==和===运算
在Java中,我们要判断两个字符串是否相同.
a.equals(b) //很简单,但是如果a是空,则抛出空指针异常
中Kotlin中
a==b 在语义上等于
a?.equals(b) ?: (b === null)
上面这句的意思
1先判断是a是不是空,如果a等于空,则返回b是否等于空引用.
2如果a不等空,则调用equals
a==b 这个和C# 中行为一致.
第三 Linq style 语法
想像一下,如果你想在Java 7 中实现这样一个功能. 查找列中电话或人名以XX开头,且电话和人名不为空的记录,将符合条件的记录以列表的形式返回.
这个功能在Java7中估计要写很多行吧.Java8中可能要简单一此.而在Kotlin中
var nlist = mData.filter { c-> c.phoneShort?.startsWith(query)?:false
|| c.phone?.startsWith(query)?:false
|| c.name?.startsWith(query)?:false
}.toList()
// mData 是一个ArrayList
是不是很方便?
而filter这个方法是一个扩展方法.也就是Filter这个方法不是由ArrayList类实现的,而是由第三方类库实现,然后被扩展上去的.
这个扩展方法很早以前在C#中就有.
结尾
写了这么多,有点睹Kotlin思C#的感觉.果然情人还是老的好