前言
23年底读了一遍"Kotlin官方文档",官方文档大而全,阅读下来,大有裨益。
此系列文章的目的是记录学习进程,同时,若能让读者迅速掌握重点内容并快速上手,那就再好不过了。
函数
带有两个 Int
参数、返回 Int
的函数。Unit返回值类型可省略。
Kotlin
fun sum(x: Int, y: Int): Int {
return x + y
}
将表达式作为函数体、返回值类型自动推断的函数:
Kotlin
fun sum(x: Int, y: Int) = x + y
变量
val:不可变变量,val变量相当于Java中的final变量。优先使⽤val来避免副作⽤。副作用的产生往往与可变数据及共享状态有关。
Kotlin
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
c = 3 // 明确赋值
var:可变变量,一般用于声明局部变量。
Kotlin
var x = 5 // 自动推断出 `Int` 类型
x += 1
字符串模板
字符串模板使用美元符号($)和花括号({})来嵌入变量或表达式。
Kotlin
var a = 1
val s1 = "a is $a"
println(s1) //输出:a is 1
a =2
val s2 = "${s1.replace("is", "was")}, but now is $a"
println(s2) //输出:a was 1, but now is 2
条件表达式
if..else...
Kotlin
fun maxOf(x: Int, y: Int): Int {
if (x > y) {
return x
} else {
return y
}
}
fun maxOf(x: Int, y: Int): Int = if (x > y) x else y
when
表达式
Kotlin
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
空值与 null 检测
编译时检查和处理空引用,避免出现空指针异常。
|-------|----|---------|-----|---------|----|
| 可空类型 | ? | 安全转换操作符 | as? | Else操作符 | ?: |
| 安全操作符 | ?. | 非空断言操作符 | !! | | |
Kotlin
fun main() {
val nullableString: String? = null
val nonNullString: String? = "Hello"
// 安全调用操作符 (?.)
println(nullableString?.length) // 输出: null
println(nonNullString?.length) // 输出: 5
// 安全转换操作符 (as?)
val tmpStr: Any? = null
val length: String? = tmpStr as? String
println(length) // 输出: null
// 非空断言操作符 (!!)
try {
val length2: Int = nullableString!!.length
println(length2)
} catch (e: NullPointerException) {
println("发生了空指针异常")
}
// Else操作符 (?:)
val result = nullableString ?: "默认值"
println(result) // 输出: 默认值
}
类型检测与自动类型转换
is运算符检测一个表达式是否是某类型的示例,如果已经判断为A类型,则检测分支可以直接当A类型使用。
Kotlin
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` 在该条件分支内自动转换成 `String`
return obj.length
}
// 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
return null
}
循环
for
循环:
Kotlin
fun main() {
val list = listOf("apple", "banana", "otherfruit")
for (item in list) {
println(item)
}
for (index in list.indices) {
println("item at $index is ${list[index]}")
}
}
Kotlin
输出:
apple
banana
otherfruit
item at 0 is apple
item at 1 is banana
item at 2 is otherfruit
while循环:
Kotlin
fun main() {
val list = listOf("apple", "banana", "otherfruit")
var index = 0
while (index < list.size) {
println("item at $index is ${list[index]}")
index++
}
}
范围
使用 in 、step、downTo等运算符。
Kotlin
fun main() {
val x = 9
val y = 10
//使用 in 运算符来检测某个数字是否在指定区间内
if (x in 1..y+1) {
println("fits in range")
}
//区间迭代
for (x in 1..5) {
print(x)
}
println()
//数列迭代
for (x in 1..10 step 2) {
print(x)
}
println()
for (x in 9 downTo 0 step 3) {
print(x)
}
}
Kotlin
输出:
fits in range
12345
13579
9630
集合
集合提供了循环遍历、判断是否包含其中、Lambda表达式表示过滤和映射等能力。
Kotlin
fun main() {
val fruits = listOf("banana", "avocado", "apple", "kiwifruit")
//对集合进行循环遍历
for (item in fruits) {
println(item)
}
//使用in运算符判断集合是否包含某实例
when {
"orange" in fruits -> println("juicy")
"apple" in fruits -> println("apple juice")
}
//Lambda表达式表示过滤和映射组合。
fruits.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach{println(it)}
}
Kotlin
输出:
banana
avocado
apple
kiwifruit
apple juice
APPLE
AVOCADO
创建基本类及其实例
Kotlin
val rectangle = Rectangle(5.0, 2.0)