循环控制
package xuhuankongzhi
//----------------for循环------------
//for循环可以对任何提供迭代器的(iterator)的对象进行遍历
/*fun main(args: Array<String>) {
val collection=setOf(1,2,3,1) //set集合不重复
for(item in collection)println(item)
//循环体可以是一个代码块
val ints=IntArray(3){i->i};
for(item:Int in ints)println(item)
//for可以循环遍历任何提供迭代器的对象
//若需要通过索引遍历也是可疑z的 ints.indices (即是数组的索引下标)
for(i in ints.indices)println(ints[i])
//注意这种在区间上遍历会编译成优化的实现而不会创建额外的对象
//或者可以使用库函数。withIndex 返回(下标,数值)的键值对
for((index,value)in ints.withIndex())println("the element at $index is $value")
}*/
//------------while 和 do..while-----------------------
/*
传统和java一样的使用
*/
//---------------返回和跳转-----------------
/*
Kotlin有三种结构化台哦转表达式
return 默认从最直接保卫他的函数或者匿名函数返回
break 终止直接包围它的循环
continue 继续下一次的直接包裹的循环
Kotlin 支持传统java的使用
Break 和Continue标签
在Kotlin中,任何表达式都可以用标签(label)来标记
标签格式为标识符后跟@符号
break 跳转到位于该标签制定的循环后面的执行点
continue 继续标签制定的continue的循环的下一次迭代
*/
/*fun main(args: Array<String>) {
loop@ for( i in 1..100)
for(j in 1..100){
println(j)
if(j==2) break@loop
}
//loop 执行点 break跳转后
}
*/
//-----------------标签处返回---------------
/*
Kotlin 有函数字面量、局部和对象表达式
因此Kotlin函数可以被嵌套,标签限制的return 允许我们从外层函数返回
最重要的一个用途是从lambda表达式中返回
*/
fun main(args: Array<String>) {
val ints=arrayOf(1,2,3,4)
fun foo(){
ints.forEach lit@{
if(it==2)return@lit
print(it)
}
//隐式,与lambda的函数名相同
ints.forEach {
if(it==2)return@forEach
print(it)
}
//匿名函数代替lambda表达式,匿名函数内部return将从该匿名函数自身返回
}
fun foo2(){
ints.forEach(fun(value:Int){
if(value==0)return
print(value)
})
}
foo()
foo2()
//return @a 1
//当返回一个值的时候,解析器优先选用标签限制的return
// 意为从标签@a 1 而不是返回一个标签标注的表达式
}