参考文档:
Kotlin中文文档:http://www.kotlindoc.cn/GettingStarted/Basic-Syntax.html#
泡在网上的日子:http://www.jcodecraeer.com/a/anzhuokaifa/2017/0612/8061.html
1. 概述
Kotlin中控制流程主要是由 if /else 、when (相当于java的switch)、for、while 以及 return、break、continue 等关键字,与java的使用基本类同。
2. if表达式
在kotlin中,if是表达式,比如他可以返回一个值。是除了condition?then:else之外的唯一一个三元表达式
//传统用法
var a:Int = 1
var b:Int = 9
var max = a
if( a < b)
max = b
//带else
var max:Int
if ( a > b)
max = a
else
max = b
//作为表达式
val max = if ( a > b ) a else b
println(max)
- if作为表达式
- if分支可以作为代码块,最后一个表达式是该代码块的值
val max = if( a > b){
print("choose a")
a
}else{
print("choose b")
b
}
注:
如果if表达式只有一个分支,或者分支的结果是Unit,它的值就是Unit
3.when表达式
when取代了c风格语言的switch,用法类似于java中的switch
//简单用法
when(x){
1 -> print("x = 1")
2 -> print("x = 2")
else ->{
print("x is neither 1 nor 2")
}
}
- when可以用作表达式或声明
- 如果用作表达式的话,那么满足条件的分支就是总表达式
- 如果用作声明,那么分支的值会被忽略
- 在其他分支都不匹配的时候默认匹配else分支
- 如果把when作为表达式的话 else分支是强制的,除非编译器可以听所有覆盖所有可能分支条件
when(x){
0,1 -> print("x == 0 or x == 1")
else -> print("s does not encode x")
}
- in 、!in 关键字表达的意思是:判断值是否在某个区间、数组和集合内;
when(x){
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
- when用法1.1
- when用法1.2
when用法1.3
is 、!is 关键字意思是:判断值是否是某个类的实例
when(x){
x is String -> x.startWith("a")//如果x是字符串类型,就判断是否首字符是“a”返回布尔类型
else -> false
}
when {
x.isOdd() -> print("x is odd") //isOdd和isEven都是自定义的方法
x.isEven() -> print("x is even")
else -> print("x is funny")
}
注:
when 表达式一般情况下也是必须跟else的,除非你吧所有可能性都已经包含在判断条件内
4.for循环
- for循环通过任何提供的迭代器进行迭代,可以遍历区间,数组,集合以及任何提供了itertor贴带起对象
//普通用法
for(item in collection)
println(item)
//语句块用法
for(item: Int is ints){
//代码块
}
//其他用法
for (i in 1..6) {
print ( " "+i )//正常用法
}
for (i in 5 downTo (1)) {
print( " "+i )//倒叙
}
for (i in 5 downTo 1 step 3){
/**
* 特定步长可以使用step()函数
* 跳过执行的代码,step 3是指
* 5 4 3 2 1
*/
print( " "+i )//特定步长可以使用step()函数 跳过执行的代码
}
- 数组和集合 所有的 for 循环都使用遍历元素 in 遍历对象确定遍历的方式
val arrayInt = intArrayOf(1,2,3,4,5) //声明1到5的数组
for ( item in arrayInt) {
println("$item") // $符号会让item 取值,而不是直接打印字符串"$item"
}
for (i in arrayInt.indices ){
println("arrayInt[$i] is ${arrayInt[i]}") //如果需要遍历数组或集合的索引,可以使用数组和集合的indices属性
}
// 如果需要遍历数组和集合的索引和值,可以使用库函数里的withIndex()方法,它返回一个 IndexedValue 对象,我们通过解构声明可以同时获取索引和值:
for( (index,value) in arrayInt.withIndex()) {
println("arrayInt[$index] is $value")
}
5.while 循环
- while 和 do…while 像往常那样
while (x > 0) {
x--
print(" "+x)
}
do {
print(" "+ y)
} while (y--) // y 在这是可见的
6.return、break、continue
和 Java 相同,Kotlin 中有三个用来跳转的关键字:return、break和continue
它们的基本用法与 Java 一致:
return:返回函数的值或终止函数函数运行;
break:终止循环;
continue:跳转到下一次循环。
Kotlin 中强化版的标签:
- 标签名@表达式 //标签名为合法的标识符,与变量名和函数名格式相同
- 标签名是自定义的,可以当做一个标记
1. Break 和 Continue 标签
loop@ for ( i in 1..100 ) {
for(j in 1..100) {
if( j==3 ) break @loop
}
}
- Break简单用法
- Break+强化标签用法
continue简单用法
- continue + 标签用法
标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。continue继续标签指定的循环的下一次迭代。
2. return标签
- Kotlin 有函数字面量、局部函数和对象表达式。因此 Kotlin 的函数可以被嵌套。
- 标签限制的return允许我们从外层函数返回。
- 最重要的一个用途就是从 lambda 表达式中返回。
- 外层函数返回
fun foo() {
ints.forEach {
if(it ==0) return print(it) // 这个return表达式从最直接包围它的函数即foo中返回。
}
}
- lambda 表达式中返回
fun foo(){
ints.forEach lit@ {
if ( it == 0 ) return @lit
print(it)
}
}
}
- 通常情况下可以使用隐式标签更方便。 该标签与接受该 lambda 的函数同名
fun foo(){
ints.forEach {
if (it ==0) return @forEach
print(it)
}
}