《第一行代码Android》kotlin总结之函数专题

前面觉得函数没有什么特别的,看一眼就懂了,但是后面发现,还有有一些东西如果知道了,可以提高编程效率,而且内容还不少,建立一个专题来学习一下。

标准函数

let函数

在Kotlin中,let函数是一个作用于任意对象的函数。它允许您在函数块中对对象进行操作,并返回最后一个表达式的结果。let函数的使用场景包括在对象非空时执行操作、链式调用函数以及在函数式编程中进行数据转换等。

let函数的语法为:

object.let { variable ->
    // 在这里可以对 variable 进行操作
    // 返回最后一个表达式的结果
}

let函数中,object表示要操作的对象,variable表示在函数块中引用该对象的变量名。您可以在函数块中对variable进行操作,然后返回最后一个表达式的结果。

下面是一个使用let函数的示例代码:

fun main() {
    val name: String? = "Alice"
    val length = name?.let { 
        println("Name is not null: $it")
        it.length
    } ?: 0
    
    println("Length: $length")
}

在上述代码中,我们定义了一个可空的字符串变量name,并使用let函数对其进行操作。

let函数块中,我们首先打印出非空的name值,然后返回其长度。

let函数的调用链中,我们使用了安全调用运算符?.,以确保在name为空时不会调用let函数。

最后,我们将let函数的结果赋值给length变量,并打印出length的值。

运行上述代码,输出结果为:

Name is not null: Alice
Length: 5

从输出结果可以看出,let函数在name不为空时被调用,打印出非空的name值,并返回其长度。最后,我们将长度赋值给length变量,并打印出length的值。

上面的例程如果看着比较吃力的话,那么你需要了解一下《第一行代码Android》kotlin总结之Lambda《第一行代码Android》kotlin总结之空指针检查

with、run 和 apply 函数

这三个函数的用法很类似,只是有稍微区别,所以放到一起来学习了。下面的例子都来源于《第一行代码 Android》

with函数

with函数的第一个参数是这个StringBuilder,然后整个lambda的上下文都是这个StringBuilder。并且lamda的最后一行会作为with函数的返回值。

    val  list = listOf("apple", "orange", "banana")
    val result = with(StringBuilder()) {
        append("start eat\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("eat finished\n")
        toString()
    }

run函数

和with函数基本没有变化,就是换了一个实现的方式而已

    val  list = listOf("apple", "orange", "banana")
    val result = StringBuilder().run {
        append("start eat\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("eat finished\n")
        toString()
    }

apply函数

有一个主要的区别就是apply返回的是对象本身,即下面例子的StringBuilder

    val  list = listOf("apple", "orange", "banana")
    val result = StringBuilder().apply{
       append("start eat\n")
        for (fruit in list) {
            append(fruit).append("\n")
        }
        append("eat finished\n")
    }

定义静态函数

最简单的类似静态函数

注意只是类似哈,不是真正的静态函数,但是调用起来是静态函数的调用还是很像的。

object Util1 {
    fun doSomething() {
        //xxx
    }
}

我们使用的时候,可以直接Util1.doSomething()来调用

伴生类方式调用

当然了上面单例的方式,整个Util中的函数都可以通过Util.xxx()的方式调用。如果我们只想实现单个函数的调用呢

class Util2 {
    fun doSomething1() {
        //xxx
    }

    companion object {
        fun doSomething2() {
            //xxx
        }
    }

}

companion 这个关键字会在Util2 的内部创建一个伴生类,kotlin会保证Util2 中只有一个伴生对象。因此就可以通过Util2.doSomething2().而Util2.doSomething1()是不行的

真正的静态函数

  • 给函数加上 @JvmStatic注解,在编译的时候就会真正编译为一个静态函数。这个注解只能添加到单例类或companion object 方法的注解上面。
class Util {
    fun doSomething1() {
        //xxx
    }

    companion object {
        @JvmStatic
        fun doSomething2() {
            //xxx
        }
    }

}
  • 在没有任何类中的方法,编译器会把它编译为静态方法。即在一个文件中只有函数,没有任何类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是李校长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值