开始kotlin的学习,在这里我也是小白一个,慢慢的去学习,只是将学习到的东西和大家进行分享,如有不对的地方,烦请大家多多指教,我们会将大多数解释放在代码中,以便更方便的理解
流程控制可以分为三种 分支语句(if、when)循环语句(for、while、do…while)跳转语句(return、continue、break、throw)本篇主要对上面着前3种做详解,下一篇对后6中做详解
注: if条件语句中,括号中的表达式返回一定是布尔值,负责报错,与python之间有很大区别;if或else后面只有一条语句,花括号可进行省略,但是出于代码规范,最好添加,也便于阅读
is操作符,表示是的含义。in和!in操作符,表示包含和不包含
//示例4 fun whenBasis(obj: Any?){ //Any类型,是kotlin中每一个类的基类,相当于java中的Object类。“?”的含义为此参数允许为空 when(obj){ in 1 .. 9 -> println("$obj in 1 .. 9") //obj的值在1到9,即满足该分支 is String -> println("$obj is String") //obj类型是字符串,即满足该分支 is Char -> println("$obj is Char") //obj类型是字符,满足该分支 else -> println("enter else") //obj的值或类型都不满足上面的分支,进入else中。和java中的default一样 } } fun main() { whenBasis(5) whenBasis("hello") whenBasis('a') whenBasis(true) } //5 in 1 .. 9 //hello is String //a is Char //enter else when的分支表达式也可以是一个代码块 示例5 import java.lang.Integer.parseInt fun whenBasisTwo(obj: Any?){ val str = "123" when(obj){ parseInt(str) -> println("$str equle obj") //parseInt(str: String) 将字符串转换为整数 !in 10 .. 20 -> println("$obj not in 10 .. 20") //这条语句含义是obj对象不在10到20范围之内,即进入该分支 else -> println("enter else") } } //上面的两条分支都对于obj是123来说是成立的,但是只会执行第一条分支,这是因为,当when里面有多条语句是成立的时候,只会执行第一个成立分支。 //当然,在代码中,我们是不会让分支对于某一个对象有多个成立项 fun main() { whenBasisTwo(123) } //123 equle obj //示例6 判断学生的成绩,改进示例3 fun whenGradeJudge(a: Int){ when{ a >= 80 -> println("The student has excellent grades") a >= 60 -> println("The student passed the examination") else -> println("The student failed in the examination") } } fun main() { whenGradeJudge(80) //The student has excellent grades whenGradeJudge(75) //The student passed the examination whenGradeJudge(45) //The student failed in the examination }完全颠覆java中的for循环规则,反而使用for(i in collection)的方式。写法和Python有些雷同,Python使用for i in range(10):这种规则。三种基于的原理这里不做描述
for 循环可以对任何提供法代器( iterator )的对象进行遍历for循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象 //示例7 最简单的for循环 fun forBasis(){ val array = arrayOf(1,2,3,4,5,6) //创建一个数组 for (i in array){ //简单的循环数组中的值 println(i) } } fun main() { forBasis() } //123456 使用.indices属性来获取下标 示例8 fun forArrayStr(){ val str = arrayOf("zhao","qian","sun","li") //创建一个字符串数组 for (i in str.indices){ //遍历循环str数组的下标 println(i) //0123 } } 使用.withIndex()方法来获取下标和对应的值 //示例9 fun forArrayStr(){ val str = arrayOf("zhao","qian","sun","li") //创建一个数组 for ((index, value) in str.withIndex()){ //withindex可以获取到数组的下标和对应的值 println("$index,$value") } } fun main() { forArrayStr() }关键字"n until m",对应数学的[n,m)
关键字"n downTo m",对应数学中的[n,m],此关键字用来循环递减的
符号"n … m",对应数学中的[n,m]
以上三种都是范围表示
//示例10 //递增 fun increasing(){ for (i in 0 .. 5){ //表示0到5.闭区间 print(i) //012345 } for (i in 0 until 5){ //表示0到5,左闭右开区间 print(i) //01234 } } //示例11 //递减 for (i in 5 downTo 0){ //表示5到0,闭区间 print(i) //543210 } 步长:关键字step。上一个数和下一个数之间的距离就是步长。步长必须是正的 for (i in 1 .. 10 step 2){ //从1开始,每次跳过两个步长显示下一个数 print(i) //13579 }