kotlin_标准函数

文章目录

    • 简介
    • repeat
    • also
    • let
    • run
    • with
    • apply
    • takeif
    • takeUnless

简介

Kotlin提供了一些标准函数,旨在帮助开发人员简化代码,它是位于Standard.kt下的一些顶层函数
kotlin_标准函数_第1张图片

repeat

最简单的标准函数,两个参数第一个是一个int值,第二个参数是一个方法(方法参数是当前执行的index,没有返回值),功能是将该方法执行n次,每次index都会传入给方法

repeat(n){ index->
	println("第$index次")
}

实例,往一个list中插入前20个奇数

val list = mutableListOf<Int>()
repeat(20){
    list.add((it + 1) * 2 - 1)
}
println(list)

also

任何对象都可以调用,参数是一个Lambda表达式,功能是将调用对象作为参数传入Lambda表达式中,返回值是参数本身:

//result是经过Lambda操作之后对象obj
val result = obj.also{
	it....
}

also最常见的使用方式是配合?.来判空

fun run(people: People?){
	people?.also{
		it.eat()
		it.sleep()
		it.work()
	}
}

这样就不需要对people多次使用 ?.
fun run(people: People?){
	people?.eat()
	people?.sleep()
	people?.work()
}

let

任何对象都可以调用,参数是一个Lambda表达式,功能和also类似,但是返回值是最后一行:

val result = obj.let {
	it...
	"result" //返回值赋值给result
}

let也可以用来判空,但是可以有返回值

fun run(people: People?){
	val result = people?.let{
		it.eat()
		it.sleep()
		it.work()
		"people has done something"
	}
}

run

任何对象都可以调用,参数是一个Lambda表达式,功能是为Lambda表达式内提供调用对象的上下文环境并且最后一行作为返回值返回。

val result = obj.run{
	"result" //返回值赋值给result
}

run一般用来将要大量使用一个对象里面方法时使用,比如建造者构建对象时

val dialog = AlertDialog.Builder(BaseApplication.instance).run {
    setTitle("对话框")
    setIcon(R.drawable.ic_launcher_background)
    setView(R.layout.activity_main)
    create()
}
dialog.show()

with

with和run的功能一模一样,只是使用方式不同,它不再需要对象来调用,直接将所需的上下文环境对象作为第一个参数传入

val result = with(obj){
	"result" //返回值赋值给result
}

使用with来构建对象时:

val dialog = with(AlertDialog.Builder(BaseApplication.instance)) {
    setTitle("对话框")
    setIcon(R.drawable.ic_launcher_background)
    setView(R.layout.activity_main)
    create()
}
dialog.show()

apply

任何对象都可以调用,参数是一个Lambda表达式,功能和with、run差不多,也是为Lambda里提供上下文环境,只是不再将最后一行作为返回值返回,而是将调用者返回

//result是obj经过Lambda操作后的obj
val result = obj.apply{
	//obj上下文
}

apply也可以和run、with那样用于建造者生成对象

val dialog = AlertDialog.Builder(BaseApplication.instance).apply {
    setTitle("对话框")
    setIcon(R.drawable.ic_launcher_background)
    setView(R.layout.activity_main)
}.create()
dialog.show()

可以用来初始化一些对象

startActivity(Intent(context, MainJavaActivity::class.java).apply { 
    putExtra("name", "dean")
    putExtra("age", 1)
})

takeif

任何对象都可以调用,参数是一个Lambda表达式,功能是通过最后一行(必须是boolean)来判断,如果是true返回自身,如果是false返回null

val result = obj.takeif{
	
	(boolean表达式) 如果是true那么result就是经过Lambda操作后的obj,否则是null
}

实例:

代码:
fun main() {
    val str = StringBuilder("你好").takeIf {
        it.length > 5
    }
    println(str?.length ?: "str is null")
}
运行结果:
str is null


代码:
fun main() {
    val str = StringBuilder("你好").takeIf {
        it.append(" 中国!")
        it.length > 5
    }
    println(str?.length ?: "str is null")
}
运行结果:
6

takeUnless

任何对象都可以调用,参数是一个Lambda表达式,功能和takeif刚好相反

val result = obj.takeUnless{
	
	(boolean表达式) 如果是true那么result就是null,否则是经过Lambda操作后的obj
}

实例:

代码:
fun main() {
    val str = StringBuilder("你好").takeIf {
        it.length > 5
    }
    println(str?.length ?: "str is null")
}
运行结果:
2


代码:
fun main() {
    val str = StringBuilder("你好").takeIf {
        it.append(" 中国!")
        it.length > 5
    }
    println(str?.length ?: "str is null")
}
运行结果:
str is null

你可能感兴趣的:(kotlin,kotlin)