乐趣区

关于android:Kotlin实战四迭代事物while和for

1、while 循环

kotlin 的 whiledo-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 设置他,不须要 getset
如下代码:
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

退出移动版