Kotlin简化了 条件判断,还简化了 循环判断
除了文字版本,也有Xmind版本 github地址
本文需要几个问题
① for循环支持几种模式?
② for循环如何取值?去index索引
③ label怎么用?简化了什么?又需要注意什么?
④ break continue集合label,可以怎么跳?
本节有5个部分
- For循环
- while与do…while循环
- 返回和跳转
- break和continue
- 标签
for循环
支持几种类型
- iterator迭代器(java也有)
for (item: Int in ints) {
// ……
}
- 索引遍历。类似for(int i = 0; i < sum; i ++)。这又是简化
for (i in array.indices) {
print(array[i])
}
- 库函数withIndex。对简化for(int i = 0; i < sum; i ++)做了升级。直接取出了值
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
"在区间上遍历"会编译成优化的实现而不会创建额外对象
任何提供了迭代器的对象 都可以被循环遍历
循环遍历的条件
有一个成员函数或者扩展 iterator()函数
- 有一个成员函数或者扩展函数 next(),并且
- 有一个成员函数或者扩展函数 hasNext() 返回 Boolean。
while 与 do…while 循环
与java一样,这里就不详述
返回和跳转
与java一样,这里就不详述
break和continue
- 任何表达式都可以用标签(label)来标记
- 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@
loop@ for (i in 1..100) {
for (j in 1..100) {
if (……) break@loop
}
}
解析一下。
在表达式前,➕标签;
- break:跳转的位置(到刚好位于该标签指定的循环后面的执行点)
- continue:继续标签指定的循环的下一次迭代
标签处返回
标签限制的 return 允许我们从外层函数返回
范例一
fun foo() {
ints.forEach {
if (it == 0) return
print(it)
}
}
return是从 包围它的 函数foo()返回
范例二
fun foo() {
ints.forEach lit@ {
if (it == 0) return@lit
print(it)
}
}
这里从forEach中返回。
范例三
自带隐式标签;与接受该lambda的函数同名
fun foo() {
ints.forEach {
if (it == 0) return@forEach
print(it)
}
}
范例四
返回值: 1
fun foo() {
abc@ ints.forEach(fun(value: Int) {
if (value == 0) return@abc 1
print(value)
})
}
从标签@abc返回1