Kotlin 核心编程 (36):基础语法 2.4.5

阅读数:2 2019 年 12 月 25 日 15:34

Kotlin核心编程(36):基础语法 2.4.5

(for 循环和范围表达式)

内容简介
本书不是一本简单介绍 Kotlin 语法应用的图书,而是一部专注于帮助读者深入理解 Kotlin 的设计理念,指导读者实现 Kotlin 高层次开发的实战型著作。书中深入介绍了 Kotlin 的核心语言特性、设计模式、函数式编程、异步开发等内容,并以 Android 和 Web 两个平台为背景,演示了 Kotlin 的实战应用。
全书共 13 章,分为 4 个部分:
热身篇—Kotlin 基础(第 1~2 章),简单介绍了 Kotlin 设计哲学、生态及基础语法,其中包括 Kotlin 与 Scala、Java 之间的关联与对比,以及 Kotlin 的类型声明的特殊性、val 和 var 的使用、高阶函数的使用、面向表达式编程的使用、字符串的定义与操作等内容;
下水篇—Kotlin 核心(第 3~8 章),深入介绍了面向对象、代数数据类型、模式匹配、类型系统、Lambda、集合、多态、扩展、元编程等 Kotlin 开发核心知识,这是本书的重点,其中涉及很多开发者特别关心的问题,比如多继承问题、模式匹配问题、用代数数据类型抽象业务问题、泛型问题、反射问题等。
潜入篇—Kotlin 探索(第 9~11 章),探索 Kotlin 在设计模式、函数式编程、异步和并发等编程领域的应用,其中包括对 4 大类设计模式、Typeclass 实现、函数式通用结构设计、类型替代异常处理、共享资源控制、CQRS 架构等重点内容的深入剖析;
遨游篇—Kotlin 实战(第 12~13 章),着重演示了 Kotlin 在 Android 和 Web 平台的实战案例,其中涉及架构方式、单向数据流模型、解耦视图导航、响应式编程、Spring 5 响应式框架和编程等内容。

在了解了 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)
}
  1. 范围表达式

你可能对“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
  1. 用 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")
}

Kotlin核心编程(36):基础语法 2.4.5

购书地址 https://item.jd.com/12519581.html?dist=jd

评论

发布