共计 2401 个字符,预计需要花费 7 分钟才能阅读完成。
1、while 循环
kotlin 的 while
和do-while
与 Java 语法统一,这里简略看一下
while (condition) { // 当条件为真时,代码体执行
/*...*/
}
do {// 无条件的执行一次,之后当条件为真时执行
/*...*/
} while (condition)
2、for 循环
for
循环仅以一种模式存在,和 java 的 for-each
循环统一
Java
int[] data={1,2,3,4,5,6,7,8,9,10};
for(int i:data){system.out,println("i");
}
Kotlin
for(i in 10){print(i)
}
3、数字迭代:区间和数列
kotlin 中没有 java 的惯例循环,所以 kotlin 应用了区间的概念
区间实质:两个值之间的距离。这两个值通常是数字:一个是起始值,一个是完结值。应用 ..
来示意
例:
val oneToTen = 1..10
留神:kotlin 区间是闭合的, 意味着第二个值始终是区间的一部分
如果你能迭代区间中所有的值,这样的区间叫做数列
举个例子应用不带参数的 when 实现 FizzBuzz:
规定:用 fizz 单词代替任何能够被三整除的数字,用 buzz 单词代替任何能够被五整除的数字。如果一个数字同时是三和五的乘数,咱们叫“FizzBuzz”。
fun fizzBuzz(i: Int) = when {
i % 15 == 0 -> "FizzBuzz" // i 能够被 15 整除,返回 FizzBuzz。就像在 Java 中,% 是模操作
i % 3 == 0 -> "Fizz" // i 能够被 5 整除,返回 Buzz
i % 5 == 0 -> "Buzz" // i 能够被 3 整除,返回 Fizz
else -> "$i" //Else 返回这个数字自身
}
for (i in 1..100) { // 迭代整数范畴 1..100
print(fizzBuzz(i))
}
//1 2 Fizz 4 Buzz Fizz 7 ...
4、迭代 map
咱们提到过,最常见的情景是,for…in 循环是迭代一个汇合。这个是和 Java 是一样的,所以上面咱们看看怎么迭代一个 map。
举个例子:打印字符的二进制示意
val binaryReps = TreeMap<Char, String>()// 用 TreeMap,所以键是排序的
for (c in 'A'..'F') { // 用字符的范畴迭代从 A 到 F 的字符
val binary = Integer.toBinaryString(c.toInt()) //ASCII 编码转换到二进制
binaryReps = binary// 在 map 中用 c 键存储值
}
for ((letter, binary) in binaryReps) { // 迭代一个 map,把键值对赋值到两个变量
println("$letter = $binary")
}
从下面代码能够看进去 ..
语法创立范畴不仅仅对数字实用,也对字符实用。
下面的代码应用了一个小技巧,应用键来拜访和更新 map 的扼要语法,能够应用 map[key]来读取值,并应用 map[key]=value 设置他,不须要 get
和set
。
如下代码: binaryReps = binary
等价于 java: binaryReps。put(c,binary)
5、应用 in
查看汇合和区间的成员
应用 in
运算符来查看一个值是否在区间中,或者它的逆运算 !in
来查看这个值是否不在这个区间中。
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
println(isLetter('q')) //true
println(isNotDigit('x')) //true
其实 c in 'a'..'z'
等价于a <= c && c <= z
in 和!in 操作子也能够在 when 表达式外面应用
fun recognize(c: Char) = when (c) {
in '0'..'9' -> "It's a digit!"in'a'..'z', in'A'..'Z'->"It's a letter!"
else -> "I don't know…"
}
println(recognize('8')) //It's a digit!
in 的应用范畴不只局限于字符串。如果你有任何反对比拟实例的类(实现了 java.lang.Comparable),就能够对这个类的实例进行比拟。
如:
println("Kotlin" in "Java".."Scala") // 和“Java”<=“Kotlin”&&“Kotlin”<=“Scala”一样
//true
字符串在这里是按字母比拟的,因为那是 String 类是这样实现 Comparable 接口的。
in 同样实用于汇合
println(“Kotlin”in setOf(“Java”,“Scala”,“hello”)) // 这个集没有“Kotlin”字符串
//false
kotlin 不蕴含在汇合外面。
总结
1、for、while 和 do-while 循环与 java 类似,然而 for 循环当初更加不便,特地是迭代 map 的时候。
2、用简洁的语法 1..5
示意区间。
3、能够应用 in
和!in
运算符来查看某个值是否属于某个区间。
3、..
蕴含起始值和完结值。
相干视频:
Android 进阶零碎学习——Gradle 入门与我的项目实战_哔哩哔哩_bilibili
Android 网络架构搭建与原理解析(一)——通过一个网络申请一步一步见证网络模块的成长_哔哩哔哩_bilibili
【Android 进阶课程】——colin Compose 的绘制原理解说(一)_哔哩哔哩_bilibili
【Android 进阶教程】——Framework 面试必问的 Handler 源码解析_哔哩哔哩_bilibili
【Android 进阶教程】——热修复原理解析_哔哩哔哩_bilibili
【Android 进阶教程】——如何解决 OOM 问题与 LeakCanary 原理解析_哔哩哔哩_bilibili