koltin的常用操作符 (2018-12-10)

2018-12-14  本文已影响0人  眼中有码

koltin的常用操作符(参考他人进行整理,用于个人笔记)

  1. 内联扩展函数之 let
  2. 内联扩展函数之 with
  3. 内联扩展函数之 apply
  4. 内联扩展函数之 run
  5. 内联扩展函数之 also
  6. 内联扩展函数之 use

一、内联扩展函数之 let

1. let函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> T.let(block: (T) -> R): R = block(this)
2. let函数的使用的一般结构
object.let{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}

//另一种用途 判断object为null的操作
object?.let{//表示object不为null的条件下,才会去执行let函数体
it.todo()
}
3. let函数适用的场景

二、内联函数之with

1. with函数底层的inline扩展函数+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> with(receiver: T, block: T.() -> R): R = receiver.block()
2. with函数使用的一般结构
Object object = new Object()
object.name="张三"
object.age()

// 相比于let 省略了 it  但是使用 最好先判断非空 object !=null
with(object){
  name="张三"
  age()
}
3. with函数的适用的场景

三、内联扩展函数之apply

1. apply函数的inline+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
2. apply函数使用的一般结构
Object object = new Object()
object.name="张三"
object.age()

// 和with 基本相似 ,但是可以直接 ?. 方式判断非空 
object?.{
  name="张三"
  age()
}
3. apply函数的适用场景

四、内联扩展函数之apply

1. run函数的inline+lambda结构
@kotlin.internal.InlineOnly
public inline fun <T, R> T.run(block: T.() -> R): R = block()
2.run函数使用的一般结构
Object object = new Object()
object.name="张三"
object.age()

// 和with ,apply 基本相似 ,但是可以直接 ?. 方式判断非空 、返回值不一样
// apply 返回传入对象本身。
object?.{
  name="张三"
  age()
}
3. run函数的适用场景

五、内联扩展函数之also

1. also函数的inline+lambda结构
@kotlin.internal.InlineOnly
@SinceKotlin("1.1")
public inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
2. also函数使用的一般结构
object.also{
it.todo()//在函数体内使用it替代object对象去访问其公有的属性和方法
...
}

//另一种用途 判断object为null的操作
//而also函数返回的则是传入对象的本身
object?.also{//表示object不为null的条件下,才会去执行also函数体
it.todo()
}
3. also函数的适用场景

六、use 的使用

1. use的用法
//读取文件方式一
    val br = BufferedReader(FileReader("hello.txt")) //打开文件读取
    with(br) { //对br中的属性和方法直接进行操作
        var line: String?

        while (true) {
            line = readLine() ?: break //读取一行数据,若为空则退出循环
            println(line) //打印读取的数据
        }
        close() //关闭文件读取
    }

    //读取文件方式二
    BufferedReader(FileReader("hello.txt")).use {
        var line: String?

        while (true) {
            line = it.readLine() ?: break //读取一行数据,若为空则退出循环
            println(line) //打印读取的数据
        }
    }

    //读取文件方式三
    println(BufferedReader(FileReader("hello.txt")).readText()) //最简单的读取文件的方法
2. use的使用总结
上一篇下一篇

猜你喜欢

热点阅读