kotlin的基础 包和循环/控制流(二)

第一篇(基本数据类型)的链接
https://blog.csdn.net/weixin_44614751/article/details/114270668


1.默默认导入
2.导入需要的
imports
可以导入一个单独的名字
或者范围内的所有可用的内容 (包,类,对象,等等):
如果命名有冲突,我们可以使用 as 关键字局部重命名解决冲突
import关键字不局限于导入类;您也可以使用它来导入其他声明:

控制流
if 表达式
在 Kotlin 中,if 是带有返回值的表达式。

val max = if (a > b) a else b

if分支可以作为块,最后一个表达式是该块的值:

val max = if (a > b){
    print("Choose a")
    a
}

When 表达式
when 取代了 C 风格语言的 switch 。最简单的用法像下面这样

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}

可以用 in 或者 !in 检查值是否值在一个范围或一个集合中:
可以用 is 或者 !is 来判断值是否是某个类型。

for 循环
for 循环可以对所有提供迭代器的变量进行迭代。等同于 C# 等语言中的 foreach。语法形式:

for (item in collection)
    print(item)

内容可以是一个语句块

for (item: Int in ints){
    // ...
}

像之前提到的, for 可以对任何提供的迭代器的变量进行迭代,比如:
– 有一个 iterator() 成员函数或扩展函数,其返回类型要
– 有一个 next() 成员函数或扩展函数, 并且
– 有一个返回 Boolean 的 hasNext() 成员函数或扩展函数。

对数组的for循环不会创建迭代器对象,而是被编译成一个基于索引的循环.
如果你想通过 list 或者 array 的索引进行迭代,你可以这样做:

for(item in list) { ... }
//for-in 遍历,遍历元素
for(index in list.indices) { ... }
//for-in 遍历,遍历下标
for ((index, item) in list.withIndex()) { ... }
//withIndex() 方法返回一个 Iterable 对象,该对象的所有元素都是 IndexedValue
list.forEach { ... }
//forEach Lambda 表达式遍历

具体实例

println("__________________________")
val array = arrayOf("alice","bob","cindy")
for (t1 in array){
    println(t1)
}
println("__________________________")
for (index in array.indices){
    println(array[index])
}
println("__________________________")
for ((t2, t22) in array.withIndex()){
    println(t22)
}

while 循环
while 和 do…while 和其它语言没什么区别

while (x > 0) {
    x--
}
do {
    val y = retrieveData()
} while (y != null) // y 在这是可见的

在循环中使用 break 和 continue

返回和跳转
Kotlin 有三种结构跳转表达式:
– return 默认情况下从最近的闭合函数或者匿名函数返回。
– break 结束最近的闭合循环
– continue 跳到最近的闭合循环的下一次循环。
val s = person.name ?: return

标签(声明和使用)
是为了方便跳转到指定位置,常和 break 和 continue 搭配使用。
但是Kotlin中的标签还可以和 return 搭配使用,表示在标签处返回。
在 Kotlin 中任何表达式都可以用标签(label)来标记。
标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。
要为一个表达式加标签,我们只要在其前加标签即可。

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (……) break@loop
    }
}

标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。
continue 继续标签指定的循环的下一次迭代。
标签返回处
最重要的一个用途就是从 lambda 表达式中返回。
如果我们需要从 lambda 表达式中返回,我们必须给它加标签并用以限制 return。

 fun foo() {
     ints.forEach {
         if (it == 0) return@forEach
         print(it)
     }
 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值