iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1

本篇文章大概會討論到下列幾個三種跳轉表達式

  • return

  • break

  • continue

return (非循環內,也可以執行)

從外層的函數或者匿名函數返回 , 接下去的程式碼執行不到

從循環 return

從外層函數 foo() return , 接下來的循環不會被執行


fun foo() {

val list = mutableListOf<Int>(1,2,3,4,5,6,7)

for (i in list){

if(i == 4) return

println(i)

}

}


fun main(args: Array<String>){
 
 foo()
 
 // 1
 // 2
 // 3
    
}

從forEach return

從外層函數 foo() return , 接下來的循環不會被執行


fun foo() {

val list = mutableListOf<Int>(1,2,3,4,5,6,7)

 list.forEach {
 
  if(it == 4) return
  
 println(it)
 
 }

}


fun main(args: Array<String>){
 
 foo()
 
 // 1
 // 2
 // 3
    
}

標籤處(label)返回

返回標籤處 inner , Array item 等於 2 時 ,從內層函數 forEach() 返回 , 並不是像上面 返回 最外層函數 會整個函數結束 , 還是會繼續下一輪


fun main(){

val ints = arrayOf(1, 2, 3, 4)

ints.forEach inner@ {

if (it == 2) return@inner

println(it)
}

}

// 1
// 3
// 4

break (限定循環中使用)

終止外層包圍他的循環, 接下去的程式碼執行不到

當 i == 6 會打破這個循環 ,因此接下來的循環都不會執行

打破循環

範例 1


fun main(args: Array<String>) { 

for (i in 1..10) { 

if (i == 6) break 

println(i) 
}

}

//1
//2
//3
//4
//5

範例 2

同上 , 當循環全部執行完,輪到執行 println("Down the implicit lable") 會打印 Down the implicit lable


fun foo(){

for (i in 0 until 10){

if (i == 6) break

println(i)

}

println("Down the implicit lable")

}
fun main (){

foo()
}

// 0
// 1
// 2
// 3
// 4
// 5
// Down the implicit lable

標籤處打破循環

範例 1.

當 i == 2 會打破 first 也就是最外層的循環, 當最外層結束了,整個循環也就結束


fun main(args: Array<String>) { 
first@ for (i in 1..4) { 
second@ for (j in 1..2) { 
println("i = $i; j = $j") 
if (i == 2) break@first 
} } }


// result :

// i = 1; j = 1
// i = 1; j = 2
// i = 2; j = 1

範例 2.

當 i == 2 會打破 second 也就是內層的循環,內層循環被結束掉, 但外層循環還會繼續執行下一次循環 , 當外層循環繼續下一次循環, 會再進行一個內層循環。


fun main(args: Array<String>) { 

first@ for (i in 1..4) { 

second@ for (j in 1..2) {

println("i = $i; j = $j") 
if (i == 2) break@second 

} } }

// result :

// i = 1; j = 1
// i = 1; j = 2
// i = 2; j = 1
// i = 3; j = 1
// i = 3; j = 2
// i = 4; j = 1
// i = 4; j = 2


continue (限定循環中使用)

接下去的程式碼執行不到 ,包圍他的外層循環會繼續下一次

跳出循環

範例1 (試著比較 break 範例 )

當 i == 6 會跳過這次的循環 ,因此接下來一行
println(i) 不會執行, 不會打印出 6 ,再進行
下一輪的循環。


fun main(args: Array<String>) { 

for (i in 1..10) { 

if (i == 6) continue

println(i) 
}

}

// 1
// 2
// 3
// 4
// 5
// 7
// 8
// 9
// 10


範例2 (試著比較 break 範例 )

同上 , 當循環全部執行完,輪到執行 println("Down the implicit lable") 會打印 Down the implicit lable ,


fun foo(){

for (i in 0 until 10){

if (i == 6) continue

println(i)

}

println("Down the implicit lable")

}
fun main (){

foo()

// 0
// 1
// 2
// 3
// 4
// 5
// 7
// 8
// 9
// Down the implicit lable

}

標籤處跳出循環

當 i == 3 && j == 2 時 , here 所代表的外層循環會跳過(i == 3)這次循環 ,繼續下一輪循環(i == 4)。


fun main(args: Array<String>) { 

here@ for (i in 1..5) { 

for (j in 1..4) { 

if (i == 3 && j == 2) continue@here 

println("i = $i; j = $j") 

} } }

// result : 


// i = 1; j = 1
// i = 1; j = 2
// i = 1; j = 3
// i = 1; j = 4
// i = 2; j = 1
// i = 2; j = 2
// i = 2; j = 3
// i = 2; j = 4
// i = 3; j = 1
// i = 4; j = 1
// i = 4; j = 2
// i = 4; j = 3
// i = 4; j = 4
// i = 5; j = 1
// i = 5; j = 2
// i = 5; j = 3
// i = 5; j = 4


上一篇
[Day 10] Collection 進階操作
下一篇
[Day 12] Kotlin 條件控制
系列文
Android 菜鳥村-開發基礎 30篇32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言