欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin開發(fā)中與if等價(jià)的takeIf與takeUnless詳解

 更新時(shí)間:2023年03月31日 11:16:45   作者:須須草  
這篇文章主要介紹了Kotlin開發(fā)中與if等價(jià)的takeIf與takeUnless使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

一、takeIf與takeUnless簡介

if差不多等價(jià)的是takeIf和takeUnless,為什么要使用這兩個(gè)關(guān)鍵字?

為了簡化代碼??!

使用if語句實(shí)現(xiàn)代碼比較繁瑣一點(diǎn),但使用if語句同樣可以實(shí)現(xiàn)同樣的效果。

簡化代碼如下:

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)
}

二、關(guān)鍵字takeIf

如果是括號(hào){}內(nèi)最后一行執(zhí)行返回的是true,則返回的自身it?

如果是括號(hào){}內(nèi)最后一行執(zhí)行返回的是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)

開發(fā)軟件運(yùn)行結(jié)果:

三、關(guān)鍵字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)

開發(fā)軟件運(yùn)行結(jié)果:

四、Android官方代碼低功耗藍(lán)牙代碼

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)
}

上面先是弄個(gè)一個(gè)相反的變量

private val BluetoothAdapter.isDisabled: Boolean
    get() = !isEnabled

也就是說調(diào)用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…就不會(huì)執(zhí)行

2、如果bluetoothAdapter?不為空,那么執(zhí)行.takeIf { it.isDisabled }?部分的代碼

3、takeIf { it.isDisabled }?為空,即it.isDisabled為false,那么右邊式子**.apply{ }**內(nèi)置函數(shù)代碼就不會(huì)執(zhí)行。

4、takeIf { it.isDisabled }?不為空,即it.isDisabled為true,就是返回自身,那么右邊式子.apply{}內(nèi)置函數(shù)代碼就執(zhí)行。

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)
}

現(xiàn)在將takeIf替換成takeUnless上面一段代碼等價(jià)于下面一段代碼

bluetoothAdapter?.takeUnless { it.isEnabled }?.apply {
    val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
}

到此這篇關(guān)于Kotlin開發(fā)中與if等價(jià)的takeIf與takeUnless詳解的文章就介紹到這了,更多相關(guān)Kotlin takeIf與takeUnless內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論