【Kotlin 初学者】标准函数

简介: 标准函数 标准函数是指Standard.kt文件中定义的函数,任何Kotlin代码都可以自由的调用所有标准函数,标准函数有很多我们这里主要学习下几个常用的标准函数。

作者简介:CSDN博客专家、华为云享专家认证

系列专栏:Kotlin 初学者

学习交流:三人行必有我师焉;择其善者而从之,其不善者而改之。


标准函数


       标准函数是指Standard.kt文件中定义的函数,任何 Kotlin 代码都可以自由的调用所有标准函数,标准函数有很多我们这里主要学习下几个常用的标准函数。


1.1 apply


       apply函数可看作一个配置函数,你可以传入一个接收者,然后调用一系列函数来配置它以便使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。

fun main() {
    var map = mutableMapOf("帅次" to 18).apply {
        put("apply-北京",188)
        put("apply-上海",288)
    }
    println(map)//{帅次=18, apply-北京=188, apply-上海=288}
}


  • 1、创建可变Map
  • 2、通过apply()函数添加数据


如下,咱们启动一个界面并传参


        val intent = Intent(this,NextActivity::class.java).apply {
            putExtra("name","sc")
            putExtra("age",19)
        }
        startActivity(intent)


可以看到,调用一个个函数类配置接收者时,变量名(map、intent)就省掉了,这是因为,在lambda表达式里,apply能让每个配置函数都作用于接收者,这种行为有时又叫做相关作用域,因为lambda表达式里的所有函数调用都是针对接收者的,或者说,它们是针对接收者的隐式调用


1.2 let


      let函数能使某个变量作用于其lambda表达式里,让it关键字能引用它。let与apply比较,let会把接收者传给lambda,apply什么都不传,匿名函数执行完,apply会返回当前接收者,而let会返回lambda的最后一行。


    var letData = 20.let {
        "不知不觉过去 $it 年了"
    }
    println(letData)

微信图片_20220525000022.png


1.3 also


       also函数和let函数功能相似,和let一样,also也是把接收者作为值参传给lambda,但有一点不同:also返回接收者对象,而let返回lambda结果。因为这个差异,also尤其适合针对同一原始对象,利用副作用做事,既然also返回的是接收者对象,你就可以基于原始接收者对象执行额外的链式调用。


    //also
    var alsoData = "AndroidSHUAICI"
    var strAlso = alsoData.also {
        println(it.length)//14
    }.also {
        println(it.startsWith("Android"))//true
    }
    println(strAlso)//AndroidSHUAICI


1.4 run


       具备接收者的隐式调用(apply)返回的是lambda的最后一行(let)


    //run
    var str = "Android帅次"
    var s = str.run {
        startsWith("Android")
    }
    println(s)//true


加强版


fun main() {
    var runS = str.run {
        startsWith("Android")
        println(this)//Android帅次
        "吼吼哈嘿"//这里决定下一个run的this类型
    }.run {
        println(this)//吼吼哈嘿
        18//这里的18传入到isAge函数
    }.run(::isAge)
    println(runS)//false
}
fun isAge(age: Int) = age > 15


从上面看出,run支持链式调用,run也支持函数引用。


1.5 with


       with函数是run的变体,功能一样,但是调用with时需要值参作为其第一个参数传入


    var strWith = "Android帅次"
    var sWith = strWith.run {
        startsWith("Android")
        "run-$this"
    }
    println(sWith)//run-Android帅次
    sWith = with(strWith) {
        startsWith("Android")
        "with-$this"
    }
    println(sWith)//with-Android帅次


1.6 takelf


       如果需要判断某个条件是否满足,再决定是否可以赋值变量或执行某项任务,takelf就非常有用,概念上讲,takelf函数类似于if语句,但它的优势是可以直接在对象实例上调用,避免了临时变量赋值的麻烦。


       takelf函数需要判断lambda中提供的条件表达式,给出true或false结果:


  • 如果判断结果是true,从takelf函数返回接收者对象。


  • 如果是false,则返回null。


    val strTakeIf = "Android帅次"
    val tkif = strTakeIf.takeIf {
        it.startsWith("Android")//返回true
    }
    println(tkif)//Android帅次
    var tkifS= strTakeIf.takeIf {
        it.startsWith("Android")
    }.takeIf {
        println("Length:${it?.length}")//Length:9
        it?.length!! > 20//返回false
    }
    println(tkifS)//null


1.7 takeUnless


       takelf辅助函数takeUnless,只有判断你给定的条件结果是false时,takeUnless才会返回原始接收者对象,跟takelf刚好相反


    val strTakeIfUn = "Android帅次"
    val un = strTakeIf.takeUnless {
        it.startsWith("Android")//返回true
    }
    println(un)//null
    var un2 = strTakeIfUn.takeUnless {
        it.startsWith("帅次")//返回false
    }
    println(un2)//Android帅次


 takeUnless函数有点调皮,了解一下就行。还是感觉takelf比较好理解和使用。


相关文章
|
2月前
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
51 1
|
2月前
|
Java Android开发 开发者
Kotlin 循环与函数详解:高效编程指南
高效编程实践 • 避免不必要的循环 - 尽量使用集合操作如 map、filter 来减少显式的循环。 • 使用尾递归优化 - 对于需要大量递归的情况,考虑使用尾递归以优化性能。 • 内联函数 - 对于传递 Lambda 表达式的函数,使用 inline 关键字可以减少运行时开销。 通过上述指南,您应该能够更好地理解 Kotlin 中的循环和函数,并能够编写更加高效和简洁的代码。Kotlin 的设计哲学鼓励开发者编写易于理解和维护的代码,而掌握循环和函数是实现这一目标的关键步骤。 如果您想了解更多关于 Kotlin 的循环和函数的信息,以下是一些官方文档和资源,它们可以提供额外的参考
35 1
|
2月前
|
Java Kotlin
Kotlin 循环与函数详解:高效编程指南
Kotlin中的循环结构让你能轻松遍历数组或范围内的元素。使用`for`循环结合`in`操作符,可以简洁地访问数组中的每个项,如字符串数组或整数数组。对于范围,可以用`..`来定义一系列连续的值并进行迭代。此外,Kotlin支持通过`break`和`continue`控制循环流程。函数则允许封装可复用的代码块,你可以定义接受参数并返回值的函数,利用简写语法使代码更加紧凑。例如,`myFunction(x: Int, y: Int) = x + y`简洁地定义了一个计算两数之和的函数。
42 1
|
3月前
|
安全 Android开发 Kotlin
Android经典面试题之Kotlin中常见作用域函数
**Kotlin作用域函数概览**: `let`, `run`, `with`, `apply`, `also`. `let`安全调用并返回结果; `run`在上下文中执行代码并返回结果; `with`执行代码块,返回结果; `apply`配置对象后返回自身; `also`附加操作后返回自身
42 8
|
3月前
|
Swift iOS开发 Kotlin
苹果iOS新手开发之Swift中实现类似Kotlin的作用域函数
Swift可通过扩展实现类似Kotlin作用域函数效果。如自定义`let`, `run`, `with`, `apply`, `also`,增强代码可读性和简洁性。虽无直接内置支持,但利用Swift特性可达成相似功能。
51 7
|
3月前
|
Android开发 Kotlin
Android面试题之kotlin中怎么限制一个函数参数的取值范围和取值类型等
在Kotlin中,限制函数参数可通过类型系统、泛型、条件检查、数据类、密封类和注解实现。例如,使用枚举限制参数为特定值,泛型约束确保参数为Number子类,条件检查如`require`确保参数在特定范围内,数据类封装可添加验证,密封类限制为一组预定义值,注解结合第三方库如Bean Validation进行校验。
52 6
|
4月前
|
Java Kotlin
Kotlin 中的 apply 函数详解
Kotlin 中的 apply 函数详解
236 0
|
4月前
|
设计模式 Java Kotlin
Kotlin 中的 run 函数详解
Kotlin 中的 run 函数详解
244 0
|
4月前
|
Java Kotlin
Kotlin 中的 with 函数简介
Kotlin 中的 with 函数简介
204 0
|
4月前
|
安全 Kotlin
Kotlin中的安全导航操作符?.、空合并运算符?:以及let函数的实践与理解
Kotlin中的安全导航操作符?.、空合并运算符?:以及let函数的实践与理解
下一篇
无影云桌面