kotlin中的标准函数

函数的作用:在连续调用同一个对象的多个方法时让代码变得更加精简
比如:有一个水果列表,我们想吃完所有水果,并且打印出结果:
通常的写法:

 fun fruit1(){
        val list= listOf("apple","orange","pear","grape")
        val builder =StringBuilder()
        builder.append("start eating fruit.\n")
        for (fruit in list){
            builder.append(fruit).append("\n")
        }
        builder.append("eat all fruits.")
        val result=builder.toString()
        println(result)
    }

打印结果:
start eating fruit.
apple
orange
pear
grape
eat all fruits.

1.with函数:
仔细观察以上代码发现:我们连续调用了很多次builder,其实这个时候就考虑用with函数让代码变得更加精简,with的第一个参数传入了StringBuilder对象,接下来不再重复调用builder.append和builder.toString(),而是直接调用append和toString()方法。Lambda表达式会作为with函数的返回值返回
示例:

val result=with(obj){
    //这是obj上下文
    "value" //with函数的返回值
}
    fun fruit2(){
        val list= listOf("apple","orange","pear","grape")
        val result= with(StringBuilder()){
            append("start eating fruit.\n")
            for (fruit in list){
                append(fruit).append("\n")
            }
            append("eat all fruits.")
            toString()
        }
        println(result)
    }

打印结果:
start eating fruit.
apple
orange
pear
grape
eat all fruits.

2.run函数:
run函数和with函数的使用非常相似,run函数通常不会直接调用,而是在某个对象的基础上调用;run函数直接收一个Lambda参数,并在Lambda表达式中提供调用对象的上下文。
示例代码:

val result=obj.run{
  //这里时obj的上下文
"value" //这是run函数的返回值
}
   fun fruit3(){
        val list= listOf("apple","orange","pear","grape")
        val result=StringBuilder().run{
            append("start eating fruit.\n")
            for (fruit in list){
                append(fruit).append("\n")
            }
            append("eat all fruits.")
            toString()
        }
        println(result)
    }
打印结果:
start eating fruit.
apple
orange
pear
grape
eat all fruits.

3.apply函数:
apply函数和run函数及其类似,都是在某个对象上调用,并且直接收一个Lambda参数,也会在Lambda表达式中提供调用对象的上下文,但是apply函数无法指定返回值,而是直接调用对象本身

val result=obj.apply{
    //这是obj的上下文
   //result==obj
}
 fun fruit4(){
        val list= listOf("apple","orange","pear","grape")
        val result=StringBuilder().apply{
            append("start eating fruit.\n")
            for (fruit in list){
                append(fruit).append("\n")
            }
            append("eat all fruits.")

        }
        println(result.toString())
    }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容