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[c] = binary//在map中用c键存储值}for ((letter, binary) in binaryReps) { //迭代一个map,把键值对赋值到两个变量    println("$letter = $binary")}

从下面代码能够看进去..语法创立范畴不仅仅对数字实用,也对字符实用。

下面的代码应用了一个小技巧,应用键来拜访和更新map的扼要语法,能够应用map[key]来读取值,并应用map[key]=value设置他,不须要getset
如下代码:
binaryReps[c] = 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')) //trueprintln(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