在kotlin中,最为核心的一个内容就是kotlin的空安全判断。他可以通过?来简单的确定是否为空类型
而接下来要说明的是let函数,对于任何一个类都继承了该方法。例如

1
2
3
obj.let{obj2? ->
//编写具体的业务逻辑
}

可以看到,obj对象调用的let函数,后面是lambda表达式,他会直接obj对象本身传递到函数中,就是obj2,如果只有一个参数,也可以直接省略,用it代替。而let的特性让他特别适合处理空指针检查
下面示例一个普通的空指针检查

1
2
3
4
5
6
fun doStudy(study: Study?){
if(study != null){
study.readBooks()
study.doHomework()
}
}

在kotlin中,你用if判断完后,他会自动检测,然后转化为非空的study类,然后就可以正常的调用。
而如果使用let的话,就会是下面这种情况

1
2
3
4
5
6
fun doStudy(study: Study?){
study?.let{
it.readBooks()
it.doHomework()
}
}

只有当study不是null时,才会执行let内的内容。
只有以上内容或许还看不出let的好处。下面再介绍一个
let可以处理全局变量的判空问题,而if无法做到

1
2
3
4
5
6
7
var study: Study? = null
fun doStudy(){
if(study !=null){
study.readBooks()
study.doHomework()
}
}

这个函数再编译时会报错,因为对于全局的变量随时有可能会被其他线程修改。任然无法保证没有空指针风险,而通过let就不会有这种问题了。