Kotlin開發(fā)中與if等價(jià)的takeIf與takeUnless詳解
一、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)文章
什么是Android靜默拍攝 Android靜默拍攝app制作方法
這篇文章主要告訴大家什么是Android靜默拍攝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Gradle屬性設(shè)置及環(huán)境變量全面教程
這篇文章主要為大家介紹了Gradle屬性設(shè)置及環(huán)境變量的全面教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Android自定義SwipeLayout仿QQ側(cè)滑條目
這篇文章主要為大家詳細(xì)介紹了Android自定義SwipeLayout仿QQ側(cè)滑條目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08Android編程中出現(xiàn)The connection to adb is down問題的解決方法
這篇文章主要介紹了Android編程中出現(xiàn)The connection to adb is down問題的解決方法,涉及Android進(jìn)程與服務(wù)的相關(guān)操作技巧,需要的朋友可以參考下2015-12-12Android實(shí)戰(zhàn)打飛機(jī)游戲之子彈生成與碰撞以及爆炸效果(5)
這篇文章主要為大家詳細(xì)介紹了Android實(shí)戰(zhàn)打飛機(jī)游戲之子彈生成與碰撞以及爆炸效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07Android中快速便捷的實(shí)現(xiàn)圓角按鈕方法詳解
圓角按鈕在我們現(xiàn)在的界面中常常會(huì)用到,最近在開發(fā)中就又遇到了,所以想著有沒有更快速更便捷的實(shí)現(xiàn)方法呢,所以就有了這篇文章,本文主要給大家介紹了關(guān)于Android中如何快速便捷的實(shí)現(xiàn)圓角按鈕的相關(guān)資料,需要的朋友可以參考下。2017-05-05Android實(shí)現(xiàn)可點(diǎn)擊的幸運(yùn)大轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可點(diǎn)擊的幸運(yùn)大轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02