《Kotlin核心编程》 ——2.4.5 for循环和范围表达式
2.4.5 for循环和范围表达式
在了解了Kotlin中的流程控制表达式之后,接下来就是我们熟悉的语句while和for。while和do-while的语法与在Java中并没有大多的差异,所以我们重点来看下Kotlin中的for循环的语法和应用。
1. for循环
在Java中,我们经常在for加上一个分号语句块来构建一个循环体,如:
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
在Kotlin中,表达上要更加简洁,可以将上述的代码等价表达为:
for (i in 1..10) println(i)
如果把上述的例子带上花括号和变量i的类型声明,也是支持的:
for (i: Int in 1..10) {
println(i)
}
2.范围表达式
你可能对“1..10”这种语法比较陌生,实际上这是在Kotlin中我们没有提过的范围表达式(range)。我们来看看它在Kotlin官网的文档介绍:
Range表达式是通过rangeTo函数实现的,通过“..”操作符与某种类型的对象组成,除了整型的基本类型之外,该类型需实现java.lang.Comparable接口。
举个例子,由于String类实现了Comparable接口,字符串值之间可以比较大小,所以我们就可以创建一个字符串区间,如:
"abc".."xyz"
字符串的大小根据首字母在字母表中的排序进行比较,如果首字母相同,则从左往右获取下一个字母,以此类推。
另外,当对整数进行for循环时,Kotlin还提供了一个step函数来定义迭代的步长:
>>> for (i in 1..10 step 2) print(i)
13579
如果是倒序呢?也没有问题,可以用downTo方法来实现:
>>> for (i in 10 downTo 1 step 2) print(i) // 通过downTo,而不是10..1
108642
此外,还有一个until函数来实现一个半开区间:
>>> for (i in 1 until 10) { print(i) }
123456789 // 并不包含10
3.用in来检查成员关系
另外一点需要了解的就是in关键字,在Kotlin中我们可以用它来对检查一个元素是否是一个区间或集合中的成员。举几个例子:
>>> "a" in listOf("b", "c")
false
如果我们在in前面加上感叹号,那么就是相反的判断结果:
>>> "a" !in listOf("b", "c")
true
除了等和不等,in还可以结合范围表达式来表示更多的含义:
>>> "kot" in "abc".."xyz"
true
以上的代码等价于:
"kot" >= "abc" && "abc" <= "xyz"
事实上,任何提供迭代器(iterator)的结构都可以用for语句进行迭代,如:
>>> for (c in array) {
println(c)
}
此外,我们还可以通过调用一个withIndex方法,提供一个键值元组:
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
- 点赞
- 收藏
- 关注作者
评论(0)