break
break
用来结束循环, 默认只返回一层循环.
@Test fun testBreak() {
// 声明一个 list, Kotlin 中不需要 new 关键字的
val list = ArrayList<Int>()
for(a in 1..3) {
for(b in 1..3) {
list.add(b)
if(b == 2)
break
}
}
assertTrue(list.size == 6) // list 中应该是 1, 2, 1, 2, 1, 2
}
可以用标签语法 label@
标记位置, 然后用 break@label
指定返回位置.
@Test fun testBreakLabel() {
val list = ArrayList<Int>()
outer@for(a in 1..3) {
inner@for(b in 1..3) {
list.add(b)
if(b == 2)
break@outer // 跳出 outer 标签
}
}
assertTrue(list.size == 2) // list 中应该是 1, 2
assertTrue(list[0] == 1)
assertTrue(list[1] == 2)
}
continue
同理
return
return
用来返回函数结果. 下面的 forEach
接收一个类型为 (T) -> Unit
的参数.
fun foo(): ArrayList<Int> {
val list = ArrayList<Int>()
(1..5).forEach lable@{
if(it == 3) return@lable
list.add(it) // list 里应该是 1, 2, 4, 5
}
return list
}
@Test fun testReturn() {
val result = foo()
assertEquals(4, result.size)
assertTrue(result[0] == 1)
assertTrue(result[1] == 2)
}
可以使用隐式标签, 与接收该 lambda 的函数同名:
/**
* 或者直接用隐式标签
*/
fun bar(): ArrayList<Int> {
val list = ArrayList<Int>()
(1..5).forEach {
if(it == 3) return@forEach // 与 forEach 同名
list.add(it) // list 里应该是 1, 2, 4, 5
}
return list
}
@Test fun testReturnImpl() {
val result = bar()
assertEquals(4, result.size)
assertTrue(result[0] == 1)
assertTrue(result[1] == 2)
}