Kotlin学习之基础篇—导包和流程控制

一. 导包

Kotlin的导包和Java区别不大。

1. 默认包

Kotlin中有一些包是默认被导入所有Kotlin文件中的:
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.*
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*

其它有些默认包取决于目标平台:
比如JVM
- java.lang.*
- kotlin.jvm.*

如果是JS
- kotlin.js.*

2. 别名

如果包名有冲突,为了区别不同的包,可以使用as关键字给包起一个别名:

import foo.Bar              // Bar is accessible
import bar.Bar as bBar      // bBar stands for 'bar.Bar'


二. 流程控制

Kotlin的流程控制主要就是 if, when, for ,while 四种表达式,因为支持各种简写方式,所以用起来比Java中的流程控制要灵活的多,至于如何使用之前的文章里都提到过,这里不详细介绍了。这里要详细介绍的是流程控制中的返回和跳转的用法。

Kotlin中有三种跳转方式:
- return 从当前的函数或匿名函数返回
- break 结束当前的循环
- continue 直接跳到下一次循环

1. break与continue标签

在Kotlin中任何表达式都可以用标签来标记,标签的格式为标识符后面跟一个@符号,如:abc@, loop@。要标记一个表达式,只需要把标签放在表达式前面即可。如下:

loop@ for (i in 1..100) {
    // ...
}

然后我们就能通过标签来结束一个循环或进行下一次循环

loop@ for(i in 1..10){
    for(j in 10 downTo 1){
        if(i % j == 0) {
            println("i = $i; j = $j")
            break@loop
        }
    }
}

运行上面的代码,输出的结果为:

i = 1; j = 1

可以看到,当i第一次能被j整除的时候,语句break@loop就直接结束了最外层的for循环。
如果把break换成continue,会输出什么结果呢?

i = 1; j = 1
i = 2; j = 2
i = 3; j = 3
i = 4; j = 4
i = 5; j = 5
i = 6; j = 6
i = 7; j = 7
i = 8; j = 8
i = 9; j = 9
i = 10; j = 10

i第一次能被j整除的时候,通过语句continue@loop,直接让最外层的进行下一次循环。如果没有调用continue@loop,在i=2;j=2被打印出来之后,内层循环会继续,那么i=2;j=1也会被打印出来。

2. return标签

用法和上面的差不多,看下面这段代码:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach lit@{
        if (it == 3) return@lit // local return to the caller of the lambda
        print(it)
    }
    print(" done with explicit label")
}

打印出来的结果为:

1245 done with explicit label
当循环到3时,通过return@lint返回到lambda表达式处,继续循环。

对于只从lambda表达式返回的情况,通常可以使用隐式标签,例如使用和lambda所传递的函数同名的标签。如下:

fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach 
        print(it)
    }
    print(" done with implicit label")
}

打印的结果和上一个结果一样。

还有一些其它内容,可以参考 官方文档,我觉得不是特别重要,只要了解有标签这么一个东西就行了,以及适当的时候使用一下。

猜你喜欢

转载自blog.csdn.net/chenrenxiang/article/details/80831186