Kotlin开发中与if等价的takeIf与takeUnless详解

 更新时间:2023年03月31日 11:16:45   作者:须须草  
这篇文章主要介绍了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静默拍摄 Android静默拍摄app制作方法

    这篇文章主要告诉大家什么是Android静默拍摄,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Kotlin fun函数使用方法

    Kotlin fun函数使用方法

    函数是执行特定任务的一组相互关联的代码块。函数用于将程序分解为不同的子模块。它使代码可重用,并使程序更易于管理,这篇文章主要介绍了Kotlin fun函数使用方法
    2022-12-12
  • Android手电筒兼容各个手机与版本

    Android手电筒兼容各个手机与版本

    这篇文章主要为大家详细介绍了Android手电筒兼容各个手机与版本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Gradle属性设置及环境变量全面教程

    Gradle属性设置及环境变量全面教程

    这篇文章主要为大家介绍了Gradle属性设置及环境变量的全面教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Android自定义SwipeLayout仿QQ侧滑条目

    Android自定义SwipeLayout仿QQ侧滑条目

    这篇文章主要为大家详细介绍了Android自定义SwipeLayout仿QQ侧滑条目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Android编程中出现The connection to adb is down问题的解决方法

    Android编程中出现The connection to adb is down问题的解决方法

    这篇文章主要介绍了Android编程中出现The connection to adb is down问题的解决方法,涉及Android进程与服务的相关操作技巧,需要的朋友可以参考下
    2015-12-12
  • Android实战打飞机游戏之子弹生成与碰撞以及爆炸效果(5)

    Android实战打飞机游戏之子弹生成与碰撞以及爆炸效果(5)

    这篇文章主要为大家详细介绍了Android实战打飞机游戏之子弹生成与碰撞以及爆炸效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android实现信息弹出框

    Android实现信息弹出框

    这篇文章主要为大家详细介绍了Android实现信息弹出框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Android中快速便捷的实现圆角按钮方法详解

    Android中快速便捷的实现圆角按钮方法详解

    圆角按钮在我们现在的界面中常常会用到,最近在开发中就又遇到了,所以想着有没有更快速更便捷的实现方法呢,所以就有了这篇文章,本文主要给大家介绍了关于Android中如何快速便捷的实现圆角按钮的相关资料,需要的朋友可以参考下。
    2017-05-05
  • Android实现可点击的幸运大转盘

    Android实现可点击的幸运大转盘

    这篇文章主要为大家详细介绍了Android实现可点击的幸运大转盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02

最新评论