简述:
相比Java, Kotlin提供了不少高级语法特性。对于一个Kotlin的初学者来说经常会写出一些不够优雅的代码。
在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。
Standard.kt是Kotlin库的一部分,它定义了一些基本函数。
这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强大。

回调函数的Kotin的lambda的简化

在Kotlin中对Java中的一些的接口的回调做了一些优化,可以使用一个lambda函数来代替。
可以简化写一些不必要的嵌套回调方法。
但是需要注意:
在lambda表达式,只支持单抽象方法模型,也就是说设计的接口里面只有一个抽象的方法,才符合lambda表达式的规则,多个回调方法不支持。
1.用Java代码实现一个接口的回调:

  1. mView.setEventListener(new ExamPlanHomeEventListener(){
  2. public void onSuccess(Data data){
  3. //todo
  4. }
  5. });

2.在Kotlin中的实现一个接口的回调,不使用lambda表达式(这种方式非常适用于kotlin中对于一个接口中含有多个回调方法)。

  1. mView.setEventListener(object: ExamPlanHomeEventListener{
  2. public void onSuccess(Data data){
  3. //todo
  4. }
  5. });

3.如果在Kotlin中的对于接口只有一个回调的方法,就符合使用lambda函数,我们可以把以上代码简化成这样。

  1. mView.setEventListener({
  2. data: Data ->
  3. //todo
  4. })
  5. //或者可以直接省略Data,借助kotlin的智能类型推导
  6. mView.setEventListener({
  7. data ->
  8. //todo
  9. })

4、如果以上代码中的data参数没有使用到的话,可以直接把data去掉

  1. mView.setEventListener({
  2. //todo
  3. })

5 以上代码还可以做个调整,由于setEventListener函数最后一个参数是一个函数的话,可以直接把括号的实现提到圆括号外面

  1. mView.setEventListener(){
  2. //todo
  3. }

6、由于setEventListener这个函数只有一个参数,可以直接省略圆括号

  1. mView.setEventListener{
  2. //todo
  3. }

内联扩展函数之let

let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,
let函数的是一个不错的选择;let函数另一个作用就是可以避免写一些判断null的操作。
1、let函数的使用的一般结构

  1. object.let{
  2. it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
  3. ...
  4. }
  5. //另一种用途 判断object为null的操作
  6. object?.let{//表示object不为null的条件下,才会去执行let函数体
  7. it.todo()
  8. }

2、let函数底层的inline扩展函数+lambda结构

  1. @kotlin.internal.InlineOnly
  2. public inline fun <T, R> T.let(block: (T) -> R): R = block(this)