Kotlin开发中与if等价的takeIf与takeUnless详解
一、takeIf与takeUnless简介
if差不多等价的是takeIf和takeUnless,为什么要使用这两个关键字?
为了简化代码!!
使用if语句实现代码比较繁琐一点,但使用if语句同样可以实现同样的效果。
简化代码如下:
fun CheckMyTakeIf(value :Boolean):Boolean = value fun main() { //使用了takeIf简化了代码 var lll :String?= name.takeIf{ CheckMyTakeIf(true) } print(lll) }
未简化代码如下:
fun CheckMyTakeIf(value :Boolean):Boolean = value fun main() { //未简化代码 var lll :String? = null if(CheckMyTakeIf(true)) lll = name else lll = null print(lll) }
二、关键字takeIf
如果是括号{}内最后一行执行返回的是true,则返回的自身it?
如果是括号{}内最后一行执行返回的是false,则返回的自身null
fun CheckMyTakeIf(value :Boolean):Boolean = value fun main() { var name :String? = "你好" var lll = name.takeIf { CheckMyTakeIf(true) CheckMyTakeIf(false) //最后返回false,所以返回空null } println(lll) lll = name.takeIf{ CheckMyTakeIf(false) CheckMyTakeIf(true) //最后返回ture,所以返回自身,自身就是name字符串 } println(lll) }
IntelliJ IDEA 2021.3.2 (Community Edition)
开发软件运行结果:
三、关键字takeUnless
fun CheckMyTakeIf(value :Boolean):Boolean = value fun main() { var name :String? = "你好" var lll = name.takeUnless { CheckMyTakeIf(true) CheckMyTakeIf(false) } println(lll) lll = name.takeUnless{ CheckMyTakeIf(false) CheckMyTakeIf(true) } println(lll) }
IntelliJ IDEA 2021.3.2 (Community Edition)
开发软件运行结果:
四、Android官方代码低功耗蓝牙代码
private val BluetoothAdapter.isDisabled: Boolean get() = !isEnabled ... // Ensures Bluetooth is available on the device and it is enabled. If not, // displays a dialog requesting user permission to enable Bluetooth. bluetoothAdapter?.takeIf { it.isDisabled }?.apply { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) }
上面先是弄个一个相反的变量
private val BluetoothAdapter.isDisabled: Boolean get() = !isEnabled
也就是说调用BluetoothAdapter.isEnabled和BluetoothAdapter.isDisabled是取反的效果
接下来就是
bluetoothAdapter?.takeIf { it.isDisabled }?.apply { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) }
这段代码怎么看呢?从左往右
1、先是bluetoothAdapter?如果为空,右边式子.takeIf { it.isDisabled }?.apply…就不会执行
2、如果bluetoothAdapter?不为空,那么执行.takeIf { it.isDisabled }?部分的代码
3、takeIf { it.isDisabled }?为空,即it.isDisabled为false,那么右边式子**.apply{ }**内置函数代码就不会执行。
4、takeIf { it.isDisabled }?不为空,即it.isDisabled为true,就是返回自身,那么右边式子.apply{}内置函数代码就执行。
private val BluetoothAdapter.isDisabled: Boolean get() = !isEnabled ... // Ensures Bluetooth is available on the device and it is enabled. If not, // displays a dialog requesting user permission to enable Bluetooth. bluetoothAdapter?.takeIf { it.isDisabled }?.apply { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) }
现在将takeIf替换成takeUnless上面一段代码等价于下面一段代码
bluetoothAdapter?.takeUnless { it.isEnabled }?.apply { val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE) startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT) }
到此这篇关于Kotlin开发中与if等价的takeIf与takeUnless详解的文章就介绍到这了,更多相关Kotlin takeIf与takeUnless内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
什么是Android静默拍摄 Android静默拍摄app制作方法
这篇文章主要告诉大家什么是Android静默拍摄,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-03-03Android编程中出现The connection to adb is down问题的解决方法
这篇文章主要介绍了Android编程中出现The connection to adb is down问题的解决方法,涉及Android进程与服务的相关操作技巧,需要的朋友可以参考下2015-12-12Android实战打飞机游戏之子弹生成与碰撞以及爆炸效果(5)
这篇文章主要为大家详细介绍了Android实战打飞机游戏之子弹生成与碰撞以及爆炸效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-07-07
最新评论