第一篇(基本数据类型)的链接
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)
}
}