Kotlin開發(fā)中與if等價的takeIf與takeUnless詳解
一、takeIf與takeUnless簡介
if差不多等價的是takeIf和takeUnless,為什么要使用這兩個關(guān)鍵字?
為了簡化代碼??!
使用if語句實現(xiàn)代碼比較繁瑣一點,但使用if語句同樣可以實現(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
如果是括號{}內(nèi)最后一行執(zhí)行返回的是true,則返回的自身it?
如果是括號{}內(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ā)軟件運行結(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ā)軟件運行結(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)
}
上面先是弄個一個相反的變量
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…就不會執(zhí)行
2、如果bluetoothAdapter?不為空,那么執(zhí)行.takeIf { it.isDisabled }?部分的代碼
3、takeIf { it.isDisabled }?為空,即it.isDisabled為false,那么右邊式子**.apply{ }**內(nèi)置函數(shù)代碼就不會執(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上面一段代碼等價于下面一段代碼
bluetoothAdapter?.takeUnless { it.isEnabled }?.apply {
val enableBtIntent = Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE)
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT)
}
到此這篇關(guān)于Kotlin開發(fā)中與if等價的takeIf與takeUnless詳解的文章就介紹到這了,更多相關(guān)Kotlin takeIf與takeUnless內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
什么是Android靜默拍攝 Android靜默拍攝app制作方法
這篇文章主要告訴大家什么是Android靜默拍攝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
Gradle屬性設(shè)置及環(huán)境變量全面教程
這篇文章主要為大家介紹了Gradle屬性設(shè)置及環(huán)境變量的全面教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06
Android自定義SwipeLayout仿QQ側(cè)滑條目
這篇文章主要為大家詳細(xì)介紹了Android自定義SwipeLayout仿QQ側(cè)滑條目,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
Android編程中出現(xiàn)The connection to adb is down問題的解決方法
這篇文章主要介紹了Android編程中出現(xiàn)The connection to adb is down問題的解決方法,涉及Android進程與服務(wù)的相關(guān)操作技巧,需要的朋友可以參考下2015-12-12
Android實戰(zhàn)打飛機游戲之子彈生成與碰撞以及爆炸效果(5)
這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)打飛機游戲之子彈生成與碰撞以及爆炸效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07
Android實現(xiàn)可點擊的幸運大轉(zhuǎn)盤
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)可點擊的幸運大轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02

