偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

先來個小劇場

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

? 隔壁老王:"用getOrElse??!比try-catch優(yōu)雅100倍!"

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

這個函數(shù)有點東西

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

舉個栗子

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

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

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

三大必殺技

1?? 數(shù)組/列表的防崩神器

val temperatureData = arrayOf(23, 25, 22)

fun getTemperature(index: Int): Any {
    // 常規(guī)寫法 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) { 
        // 動態(tài)計算默認值
        (employeeBonuses.values.average() * 0.5).toInt() 
    }
}

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

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

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

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
}

靈魂拷問區(qū)

? ?問:和?:空合并操作符有啥區(qū)別?

? ??答:getOrElse能根據(jù)索引/鍵動態(tài)生成默認值,更靈活!

? ?問:會影響性能嗎?

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

實戰(zhàn)套路

場景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:游戲開發(fā)

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
}

結合其他函數(shù)

// 先過濾再獲取,雙保險!
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時,依然會觸發(fā)默認值!

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

總結大禮包

getOrElse的正確打開方式:

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

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

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

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

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

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

群暉

2013-08-01 09:47:13

2010-10-09 09:26:59

Array數(shù)組JS

2009-07-17 18:14:58

2010-08-24 13:34:11

CSSpadding

2013-08-30 10:49:26

2010-09-10 09:42:37

borderclearCSS

2023-04-17 23:49:09

開發(fā)代碼Java

2009-08-10 16:48:07

2013-07-17 10:56:05

數(shù)據(jù)中心電源保險

2017-07-05 16:43:52

VSAN加密虛擬化

2016-02-29 16:54:10

OpenStack混合云應用軟件定義基礎設施

2009-05-28 10:12:04

2017-07-06 08:21:27

VSAN加密虛擬機
點贊
收藏

51CTO技術棧公眾號