流程控制:循环语句

Kotlin 中的循环语句有 for 和 while 两个,但是因为 Kotlin 作为一种更现代的语言,提供了更加方便的函数式编程方法,使用流式 API 处理以前需要用循环的地方会更加简洁,所以建议大家在能够使用流式 API 的地方尽量不要使用循环语句。

1. for 循环语句

Kotlin 中的 for 循环抛弃了类 C 语言中的三段式参数,这种写循环的方式有几个弊端:

  1. 非常容易在边界问题上出错(这也是学校考试的重点);

  2. 为指定循环次数引入不必要的参数(大名鼎鼎的 i);

  3. 写法臃肿不堪。

Kotlin 为解决这个问题,对 for 循环进行了改革:它规定,所有的 for 循环都使用 遍历元素 in 遍历对象 确定遍历的方式,这里的“遍历对象”可以是 区间、数组、集合 和其他任何提供了 iterator 迭代器的对象。

首先我们看一下数组和集合,我们可以直接使用 for 循环遍历它们中的元素:

val arrayInt = intArrayOf(1, 2, 3, 4, 5)for (item in arrayInt) {

  println("$item")}

第二行里的 item 就是 arrayInt 数组中的元素。

如果需要遍历数组或集合的索引,可以使用数组和集合的 indices 属性:

for (i in arrayInt.indices) {

  println("arrayInt[$i] is ${arrayInt[i]}")}

如果需要遍历数组和集合的索引和值,可以使用库函数里的 withIndex() 方法,它返回一个 IndexedValue 对象,我们通过 解构声明 可以同时获取索引和值:

for ((index, value) in arrayInt.withIndex()) {

  println("arrayInt[$index] is $value")}

上面三个 for 循环语句使用了不同的遍历对象,但输出了相同的结果,让我们可以通过不同的方法灵活地遍历数组和集合。

区间 是 Kotlin 加入的一种新的数据形式,它的构成是 较小元素 .. 较大元素,这里的“..”操作符重载了 rangeTo() 函数。

只要是实现了 Compare 接口的类型,都能使用区间,但是我们一般用的比较多的是 整数区间,而且只有整数区间才能用作 for 循环中的迭代

for (i in 1..5) println(i) //输出 1 到 5 的数字

如果想倒序循环,可以使用 downTo() 函数,一般写成中缀的形式:

for (i in 5 downTo 1) println(i) //输出 5 到 1 的数字

特定步长可以使用 step() 函数,一般也写成中缀的形式:

for (i in 5 downTo 1 step 3) println(i) //输出 5 2for (i in 1..5 step 2) println(i) //输出 1 3 5

注意,这里的步长只能是 整数

2. while 语句

与 Java 完全相同。(除了算法,谁会用它)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章