Kotlin的“魔法標簽”—`return@label`使用指南
你在玩超級瑪麗:遇到怪物時,你只想跳過這個小怪(return@label),而不是直接退出整個關卡(普通return)。這就是return@label的魔力!?
標簽:你的代碼遙控器
return@label就像給你的代碼塊貼了個名字標簽,讓你能精準控制:
// 給代碼塊貼個"loop"標簽
listOf(1,2,3).forEach {
if (it == 2) return@forEach // 只跳過數字2
println("抓到的數字: $it")
}運行效果:
抓到的數字: 1
抓到的數字: 3小貼士:標簽名可以自定義,用@符號連接就行!
// 給代碼塊貼個"loop"標簽
listOf(1,2,3).forEach loop@ {
if (it == 2) return@loop // 只跳過數字2
println("抓到的數字: $it")
}危險!裸奔的return
fun numberPrinter() {
listOf(1,2,3).forEach {
if (it == 2) return // 裸return會直接結束整個函數!
println(it)
}
println("這句永遠不會執行") // 被裸return截胡了
}運行效果:
1警告:在Lambda里用裸return就像在火藥庫抽煙——整個函數都會爆炸!
Kotlin 中如何優雅地退出循環:實用技巧大揭秘
多層跳跳棋技巧
fun nestedLoops() {
// 外層貼"outer"標簽
(1..3).forEach outer@ { row ->
// 內層貼"inner"標簽
('A'..'C').forEach inner@ { col ->
if (col == 'B') return@inner // 跳過B列
if (row == 2 && col == 'A') return@outer // 跳過第2行整行
println("坐標 ($row,$col)")
}
}
}運行效果:
坐標 (1,A)
坐標 (1,C)
坐標 (3,A)
坐標 (3,C)就像玩跳棋:return@inner跳過單個格子,return@outer跳過整行!
安全模式:run + return@label
fun fetchData() {
val result = run safeReturn@ {
val data = loadData()
if (data == null) return@safeReturn "默認數據" // 提前結束返回安全值
"成功加載: $data"
}
println(result)
}安全機制:
? 當loadData()返回null時,立即返回"默認數據"
? 避免出現空指針崩潰
? 代碼繼續執行后面的println
使用指南
? 基礎玩法:直接在Lambda前加標簽@
? 隱身模式:使用默認標簽(如return@forEach)
? 跳關技巧:多層嵌套時跳外層
? 安全結界:在run/let/apply中提前退出
?? return@label是代碼的精準手術刀,用好了能讓程序既靈活又安全!























