代码:
/**
* https://blog.csdn.net/totond/article/details/106070606
* https://blog.csdn.net/feelinghappy/article/details/109676952
*/
fun main(args: Array<String>) {
val userName = "ABC"
/**
* takeIf 因为条件不成立所以返回null 所以 println(it)
println("长度大于3") 不会被打印
*/
userName.takeIf {
println(it+"=====")
it.length>10
}?.also {
println(it)
println("长度大于3")
}?: run {
println("没有命中")
}
// let、also、 传递的是it with run apply传的是this
// takeIf如果表达式(predicate)返回的是true 那么 takeIf返回的是this 否则的话返回null
/**
* 返回 this 说明为true 也就是不为null 那么?.also{} 里面的方法 会根据 predicate的值来决定是否执行
* 如果 predicate 为false 那么返回null 而 ?.是非空判断 则不会执行also{}里面的代码
*/
// userName.takeIf {
// it.length>10
// }.also {
// //看这里的it 是可空类型 所以不受 it.length>10条件的限制 下面的打印会输出
// println("长度大于3")
// }
/**
*
public inline fun <T> T.takeIf(predicate: (T) -> Boolean): T? {
contract {
callsInPlace(predicate, InvocationKind.EXACTLY_ONCE)
}
return if (predicate(this)) this else null
}
*/
/**
* takeUnless 和takeIf刚好是返回的对于表达式 表达式为false才返回this 否则返回null
*/
// userName.takeUnless {
// println(it+"=====")
// it.length>10
// }?.also {
// println(it)
// println("长度大于3")
// }
}
网友评论