0
点赞
收藏
分享

微信扫一扫

Android开发学习之路--Kotlin之常用表达式及函数

伢赞 2023-01-15 阅读 155


中缀表达式

只有一个参数,用infix修饰的函数

infix fun shouldBe(name:String) {
}

this shouldBe "666"

if 表达式

看一个max函数,这里的if是有返回值的,也就是a>=b返回a,否则返回b

fun max(a:Int, b: Int) = if(a >= b) a else b

when 表达式

判断类型直接返回对应的结果

fun type(obj: Any) = when (obj) {
is Long -> "I am Long"
is String -> "I am String"
else -> "I am unknow"
}

apply

调用某对象的apply函数,在函数块内可以通过this指代该对象。返回值为该对象自己。

  • 函数定义:

fun T.apply(block: T.() -> Unit): T { block(); return this }

  • 示例:

class Data(var name: String = "", var phone: String = "")

var applyTest = Data().apply {
this.name = "eastmoon"
phone = "10086"
}

在apply块中,可以直接赋值,当然也可以省略this,最后返回对象自己.适用于run函数的任何场景,一般用于初始化一个对象实例的时候,操作对象属性,并最终返回这个对象

let

调用某对象的let函数,则该对象为函数的参数。在函数块内可以通过it指代该对象。返回值为函数块的最后一行或指定return表达式。
- 函数定义:

fun T.let(block: (T) -> R): R = block(this)

  • 示例:

val letTest: Data? = Data()
letTest?.let {
it.name = "huaixi"
it.phone = "12580"
true
} ?: let {
toast("letTest is null")
false
}

在let块中,可以直接赋值,不可以省略it,最后返回true.适用于处理不为null的操作场景

with

with函数和前面的几个函数使用方式略有不同,因为它不是以扩展的形式存在的。它是将某对象作为函数的参数,在函数块内可以通过this指代该对象。返回值为函数块的最后一行或指定return表达式。
- 函数定义:

fun with(receiver: T, block: T.() -> R): R = receiver.block()

  • 示例:

val withTest = Data()
with(withTest) {
name = "huaixi"
this.phone = "12580"
true
}

在with块中,可以直接赋值,当然也可以省略this,最后返回true.适用于调用同一个类的多个方法时,可以省去类名重复.

run

调用run函数块。返回值为函数块最后一行,或者指定return表达式。

  • 函数定义:

fun T.run(block: T.() -> R): R = block()

  • 示例:

val runTest = Data()
runTest.run {
this.name = "huaixi"
phone = "12580"
true
}

在run块中,可以直接赋值,当然也可以省略this,最后返回true.适用于let,with函数任何场景。

also

调用某对象的also函数,则该对象为函数的参数。在函数块内可以通过 it 指代该对象。返回值为该对象自己。

  • 函数定义:

fun T.also(block: (T) -> Unit): T { block(this); return this }

  • 示例:

val alsoTest = Data().also {
it.name = "huaixi"
it.phone = "12580"
}

在also块中,可以直接赋值,不可以省略it,最后返回对象自己. 适用于let函数的任何场景,一般可用于多个扩展函数链式调用


举报

相关推荐

0 条评论