Code前端首页关于Code前端联系我们

Kotlin开发Android应用,吸取第一课

terry 2年前 (2023-09-23) 阅读数 71 #移动小程序

Kotlin的Android应用开发已经逐渐成为一种趋势。因此,理解和掌握Kotlin的语言至关重要。
现将学习Kotlin的过程记录如下,以供复习使用。 ?保持身份。因此,两个等于在逻辑上确定两个变量的数值相等,而三个等于同时比较类型同一性。

val a: Int = 10000
val boxedA: Int? = a
val anotherBoxedA: Int? = a
println(a == a) // 输出“true”
println(boxedA == anotherBoxedA) // 输出“true”
//========但是========
println(a === a) // 输出“true”
println(boxedA === anotherBoxedA) // !!!输出“false”!!!

3。在基本数据类型中,较小的类型不能隐式转换为较大的类型。这意味着如果没有显式转换,我们无法将 Byte 值分配给 Int 变量。

val b: Byte = 1 // OK, 字面值是静态检测的
val i: Int = b // 错误
val i: Int = () // OK:显式拓宽
print(i)// 输出1

4。控制流
If 表达式
在 Kotlin 中,if 表达式意味着它将返回一个值。因此不需要三元运算符(条件 ? then : else),因为一个简单的 if 就可以完成这项工作。

var max = a 
if (a < b) max = b
// With else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}
// 作为表达式
val max = if (a > b) a else b

When 表达式
when 依次将其参数与所有分支条件进行比较,直到分支满足条件。

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}

when也可以用来替代if-else链。如果不给定参数,所有分支条件都是简单的布尔表达式,当分支条件为真时,执行分支

when {
    () -> print("x is odd")
    () -> print("x is even")
    else -> print("x is funny")
}

For 循环

for (i in 1..3) {
    println(i)
}
for (i in 6 downTo 0 step 2) {
    println(i)
}

for (i in array.indices) {
    println(array[i])
}

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

While 循环
与 java 相同,while 和 do …while 使用 as平常

while (x > 0) {
    x--
}

do {
  val y = retrieveData()
} while (y != null) // y 在此处可见

回报差异

1)fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return // 非局部直接返回到 foo() 的调用者
        println(it)
    }
    print("this point is unreachable")
}
// 结果返回:12
2)fun foo() {
    listOf(1, 2, 3, 4, 5).forEach a@{
        if (it == 3) return@a // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
        println(it)
    }
    print(" done with explicit label")
}

3)fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
        print(it)
    }
    print(" done with implicit label")
}

4)fun foo() {
    listOf(1, 2, 3, 4, 5).forEach(fun(value: Int) {
        if (value == 3) return  // 局部返回到匿名函数的调用者,即 forEach 循环
        print(value)
    })
    print(" done with anonymous function")
}
/*以上2)、3)4)三种写法均返回:1245 done with anonymous function
这三种写法中使用的局部返回类似于在常规循环中使用 continue。并没有 break 的直接等价形式,我们可以通过增加另一层嵌套 lambda 表达式并从其中非局部返回来模拟*/
5)fun foo() {
    run loop@{
        listOf(1, 2, 3, 4, 5).forEach {
            if (it == 3) return@loop // 从传入 run 的 lambda 表达式非局部返回
            print(it)
        }
    }
    print(" done with nested loop")
}
// 此时返回:12 done with nested loop

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

热门