kotlin_标准函数

简介

Kotlin提供了一些标准函数,旨在帮助开发人员简化代码,它是位于Standard.kt下的一些顶层函数
在这里插入图片描述

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值