成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

給代碼加個保險箱!Kotlin getOrElse花式用法大揭秘

開發 開發工具
??getOrElse??的正確打開方式:把可能爆炸的操作換成安全模式,默認值可以玩出花樣(計算值、拋異常、調用函數...),讓代碼像德芙一樣絲滑。

先來個小劇場

? 程序員小張:"我的App又閃退了!用戶輸入了個不存在的索引..."

? 隔壁老王:"用getOrElse啊!比try-catch優雅100倍!"

? 小張:"還有這種摸魚神器?"

這個函數有點東西

getOrElse就像你的代碼保鏢——當你要從集合里拿東西時:? 能拿到 → 直接給你想要的? 拿不到 → 掏出你事先準備的Plan B

舉個栗子

val snackCabinet = listOf("辣條", "薯片", "可樂")

fun main() {
    // 正常情況
    println(snackCabinet.getOrElse(1) { "空氣" }) // 輸出:薯片

    // 作死情況
    println(snackCabinet.getOrElse(10) { 
        "第10個柜子是老板藏的私房錢,別碰!" 
    }) // 輸出:第10個柜子是老板藏的私房錢,別碰!
}

三大必殺技

1?? 數組/列表的防崩神器

val temperatureData = arrayOf(23, 25, 22)

fun getTemperature(index: Int): Any {
    // 常規寫法 vs getOrElse
    // if (index < temperatureData.size) temperatureData[index] else "N/A"  
    return temperatureData.getOrElse(index) { "Sensor Error" }
}

fun main() {
    println(getTemperature(5))  // 輸出:Sensor Error
}

2?? Map的萬能鑰匙

val employeeBonuses = mutableMapOf("老王" to 5000)

fun calculateBonus(name: String): Int {
    // 當你要找不存在的鍵時...
    return employeeBonuses.getOrElse(name) { 
        // 動態計算默認值
        (employeeBonuses.values.average() * 0.5).toInt() 
    }
}

fun main() {
    println(calculateBonus("Reathin"))  // 輸出:2500 (因為只有老王一個人)
}

3?? 超智能的默認值工廠

默認值可以是個函數!這意味著你可以:

val stockPrices = listOf(18.5, 19.3, 20.1)

fun fetchStock(index: Int): Double {
    return stockPrices.getOrElse(index) { 
        // 實時獲取最新股價
        Random.nextDouble(15.0, 25.0) 
    }
}

fun main() {
    println("%.2f".format(fetchStock(10)))  // 輸出類似:21.34
}

靈魂拷問區

? ?問:和?:空合并操作符有啥區別?

? ??答:getOrElse能根據索引/鍵動態生成默認值,更靈活!

? ?問:會影響性能嗎?

? ??答:lambda表達式會被inline處理,放心用!

實戰套路

場景1:表單校驗

data class UserForm(val name: String, val age: Int)

fun parseForm(inputs: List<Any>): UserForm {
    return UserForm(
        name = inputs.getOrElse(0) { "Reathin" }.toString(),
        age = (inputs.getOrElse(1) { 18 } as? Int) ?: 18
    )
}

fun main() {
    println(parseForm(listOf("Reathin")))  // 輸出:UserForm(name=Reathin, age=18)
}

場景2:游戲開發

val inventory  = arrayOf("藥水", "寶劍")

fun useItem(slot: Int) {
    val item  = inventory.getOrElse(slot) { 
        throw IllegalArgumentException("空氣怎么用?") 
    }
    println("使用 $item") 
}

fun main() {
    useItem(3)  // 拋出異常:IllegalArgumentException
}

專家級騷操作

套娃寫法

// 如果連默認值都可能不存在?再套一層!
fun getDeepValue() = listOf(1, 2, 3).getOrElse(5) { 
        (10..20).filter { it % 3 == 0 }
            .getOrElse(4) { -1 } 
    }

fun main() {
    println(getDeepValue())  // 輸出:-1
}

結合其他函數

// 先過濾再獲取,雙保險!
fun processData() = (1..10)
    .filter { it % 2 == 0 }
    .map { it * 10 }
    .getOrElse(5) { listOf(-1) }

fun main() {
    println(processData())  // 輸出:[20, 40, 60, 80, 100, -1]
}

避坑指南

?? 注意:當Map的值為null時,依然會觸發默認值!

val nullableMap  = mapOf("key" to null)
println(nullableMap .getOrElse("key") { "我是備胎" }) // 輸出:我是備胎

總結大禮包

getOrElse的正確打開方式:

? 把可能爆炸的操作換成安全模式

? 默認值可以玩出花樣(計算值、拋異常、調用函數...)

? 讓代碼像德芙一樣絲滑~

下次遇到索引越界/鍵不存在時,記得給你的代碼上個保險!快去試試這些騷操作吧~

責任編輯:武曉燕 來源: 沐雨花飛碟
相關推薦

2012-06-13 10:43:39

英特爾酷睿博銳

2011-04-22 11:31:15

Mac保險箱

2017-07-24 09:02:27

2009-04-07 12:49:43

2009-03-09 18:49:35

Windows 7證書管理器保險柜

2017-08-03 12:54:30

2016-10-26 15:32:24

群暉

2010-10-09 09:26:59

Array數組JS

2010-08-24 13:34:11

CSSpadding

2013-08-01 09:47:13

2009-07-17 18:14:58

2010-09-10 09:42:37

borderclearCSS

2013-07-17 10:56:05

數據中心電源保險

2023-04-17 23:49:09

開發代碼Java

2013-08-30 10:49:26

2018-03-12 09:52:22

Linux命令rm

2025-05-13 08:21:18

2010-08-06 09:45:50

Flex事件機制

2010-08-06 10:15:35

Flex綁定

2010-08-25 13:54:29

CSStop
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区二区在线观看 | 91人人爽| 夫妻午夜影院 | 亚洲乱码一区二区三区在线观看 | 男人天堂网址 | 成人免费xxxxx在线视频 | 久久综合一区 | 黄色毛片视频 | 亚洲精品久久久久中文字幕二区 | 亚洲国产精品久久久久秋霞不卡 | 欧美日韩亚洲三区 | 91中文视频 | 欧美极品视频在线观看 | 午夜在线影院 | 国产精品久久久久久久久婷婷 | 81精品国产乱码久久久久久 | 国产亚洲一区二区精品 | 午夜激情免费视频 | 亚洲一区二区免费视频 | 高清国产午夜精品久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 久久久久久久综合 | 日韩在线观看网站 | 成人在线免费观看视频 | 91热在线| 午夜视频在线观看网址 | 电影午夜精品一区二区三区 | 午夜影院普通用户体验区 | 一区二区三区在线看 | 久久精品亚洲一区二区三区浴池 | 亚洲欧美一区二区三区国产精品 | 国产精品一区二区在线 | 91在线一区 | 蜜桃在线一区二区三区 | 欧美激情免费在线 | 香蕉久久网 | 黄视频免费 | 国产一区91精品张津瑜 | 亚洲精品久久久一区二区三区 | 午夜精品一区二区三区在线观看 | 中文字幕一级毛片视频 |