前言
相比Java语言Kotlin更加简洁安全高效。不仅支持lambda表达式,还支持非空验证机制,另外提供一套源码标准库(Standard.kt)。但是,对于Kotlin的初学者来说,可能会经常写编写出不够优雅的代码,而Kotlin提供了一些内置函数便可以帮助优化代码。
Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。
一、Kotin的lambda
在Kotlin中对Java中的一些的接口的回调可以使用一个lambda函数做一些优化,减少一些不必要的嵌套回调方法。
但是需要注意lambda表达式的规则,只支持单抽象方法模型,不支持多个回调方法。
1、Java代码接口的回调
mView.setEventListener(new ExamPlanHomeEventListener(){
public void onSuccess(Data data){
//TODO
}
});
2、Kotlin实现接口的回调
mView.setEventListener(object: ExamPlanHomeEventListener{
public void onSuccess(Data data){
//TODO
}
});
mView.setEventListener({
data: Data ->
//TODO
})
//或者可以直接省略Data,借助kotlin的智能类型推导
mView.setEventListener({
data ->
//TODO
})
//如果以上代码中的data参数没有使用到的话,可以直接把data去掉
mView.setEventListener({
//TODO
})
//或
mView.setEventListener(){
//TODO
}
//只有一个参数,可以直接省略圆括号
mView.setEventListener{
//todo
}
可见十分的简洁。
二、let函数
1、简介
let函数实际上是一个作用域函数,当需要去定义一个变量在一个特定的作用域范围内时,就可以使用let函数。let函数只接收一个 Lambda 参数,并且会在 Lambda 函数块中提供调用对象的上下文。let函数另一个作用就是可以避免写一些判断null的操作。
2、示例
//在函数体内使用it替代object对象去访问其公有的属性和方法
object.let{
it.todo()
...
}
//另一种用途 判断object为null的操作
object?.let{
it.todo()//表示object不为null的条件下,才会去执行let函数体
}
//使用let前
mVideoPlayer?.setVideoView(activity.course_video_view)
mVideoPlayer?.setControllerView(activity.course_video_controller_view)
mVideoPlayer?.setCurtainView(activity.course_video_curtain_view)
//使用let后
mVideoPlayer?.let {
it.setVideoView(activity.course_video_view)
it.setControllerView(activity.course_video_controller_view)
it.setCurtainView(activity.course_video_curtain_view)
}
3、分析
从源码let函数的结构