Kotlin中 takeIf 和 takeUnless 的一种使用场景

时间:2025-02-08 13:20:53

首先先来看看takeIf 和 takeUnless 的实现:

//takeIf
public inline fun <T> (predicate: (T) -> Boolean): T? {
    ...
    return if (predicate(this)) this else null
}


//takeUnless
public inline fun <T> (predicate: (T) -> Boolean): T? {
    ...
    return if (!predicate(this)) this else null
}

takeIf  :   接收一个判断条件表达式,如果判断表达式为true则返回 对象本身,false返回 null

takeUnless:  与takeIf相反,  如果判断表达式为true则返回 null,false返回 对象本身

 

所以有这么一种场景可以使用,如请求后台返回了一个UserCallback对象,需要在界面显示这个UserCallback包含的一个address字符串,如果返回的address如果是null或空字符串则显示“未设置”。.

以前这种场景一般都是这样实现的:

val addr = 
 = if (()) "未设置" else addr

 

但使用takeIf 或 takeUnless 可以这样实现更为直接

 =  { () }?:"未设置"

//或者使用takeIf的写法
// =  { !() }?:"未设置"

 

相关文章