Kotlin开发Android应用,吸取第一课
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前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。