《Kotlin核心编程》 ——2.4.5 for循环和范围表达式

举报
华章计算机 发表于 2020/02/21 21:52:36 2020/02/21
【摘要】 本节书摘来自华章计算机《Kotlin核心编程》 —— 书中第2章,第2.4.5节,作者是水滴技术团队 。

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")

}


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。