Kotlin基础知识全面解析(下)
文章目录
- 第六章:集合与函数式编程
- 6.1 集合概述
- 6.2 集合操作
- 6.3 序列
- 第七章:协程与异步编程
- 7.1 协程基础
- 7.2 挂起函数
- 7.3 异步与等待
- 7.4 协程上下文与调度器
- 第八章:Kotlin标准库
- 8.1 作用域函数
- let函数
- run函数
- with函数
- apply函数
- also函数
- 8.2 其他实用函数
- 第九章:Kotlin与Java互操作
- 9.1 从Kotlin调用Java代码
- 9.2 从Java调用Kotlin代码
- 9.3 互操作注意事项
- 第十章:Kotlin编码规范与最佳实践
- 10.1 命名规范
- 10.2 代码风格
- 10.3 最佳实践
- 10.4 性能考虑
- 结语

第六章:集合与函数式编程
6.1 集合概述
Kotlin集合分为可变和不可变:
// 不可变集合
val list = listOf(1, 2, 3)
val set = setOf(1, 2, 3)
val map = mapOf(1 to "one", 2 to "two")// 可变集合
val mutableList = mutableListOf(1, 2, 3)
val mutableSet = mutableSetOf(1, 2, 3)
val mutableMap = mutableMapOf(1 to "one", 2 to "two")
6.2 集合操作
Kotlin提供了丰富的集合操作函数:
val numbers = listOf(1, 2, 3, 4, 5)// 过滤
val evens = numbers.filter { it % 2 == 0 } // [2, 4]// 映射
val squares = numbers.map { it * it } // [1, 4, 9, 16, 25]// 排序
val sorted = numbers.sortedDescending() // [5, 4, 3, 2, 1]// 分组
val grouped = numbers.groupBy { if (it % 2 == 0) "even" else "odd" }
// {"odd"=[1,3,5], "even"=[2,4]}// 折叠
val sum = numbers.fold(0) { acc, i -> acc + i } // 15
6.3 序列
序列(Sequence)是Kotlin中的惰性集合:
val sequence = sequenceOf(1, 2, 3)
val generatedSequence = generateSequence(1) { it * 2 }val result = numbers.asSequence().filter { it % 2 == 0 }.map { it * it }.toList() // [4, 16]
第七章:协程与异步编程
7.1 协程基础
协程是轻量级的线程,可以挂起和恢复:
import kotlinx.coroutines.*fun main() = runBlocking {launch {delay(1000L)println("World!")}println("Hello,")
}
// 输出:
// Hello,
// World!
7.2 挂起函数
使用suspend
关键字定义挂起函数:
suspend fun fetchData(): String {delay(1000L)return "Data loaded"
}fun main() = runBlocking {val data = fetchData()println(data) // 输出: Data loaded
}
7.3 异步与等待
fun main() = runBlocking {val deferred = async {delay(1000L)"Result"}println("Waiting...")println(deferred.await()) // 输出: Result
}
7.4 协程上下文与调度器
fun main() = runBlocking {launch { // 默认继承父协程的上下文println("main runBlocking: ${Thread.currentThread().name}")}launch(Dispatchers.Unconfined) {println("Unconfined: ${Thread.currentThread().name}")}launch(Dispatchers.Default) {println("Default: ${Thread.currentThread().name}")}launch(newSingleThreadContext("MyThread")) {println("newSingleThreadContext: ${Thread.currentThread().name}")}
}
第八章:Kotlin标准库
8.1 作用域函数
Kotlin提供了5个作用域函数:let
, run
, with
, apply
, also
let函数
val str: String? = "Hello"
str?.let {println(it.length) // 只在str非null时执行
}
run函数
val result = "Hello".run {println(length) // 5substring(1, 3) // 返回"el"
}
with函数
val numbers = mutableListOf(1, 2, 3)
with(numbers) {println(size) // 3add(4)println(size) // 4
}
apply函数
val person = Person().apply {name = "Alice"age = 25
}
also函数
val numbers = mutableListOf(1, 2, 3)
numbers.also {println("Before adding: $it")
}.add(4)
8.2 其他实用函数
// takeIf和takeUnless
val number = 42
val even = number.takeIf { it % 2 == 0 } // 42
val odd = number.takeUnless { it % 2 == 0 } // null// repeat
repeat(3) {println("Hello $it")
}
第九章:Kotlin与Java互操作
9.1 从Kotlin调用Java代码
Kotlin可以无缝调用Java代码:
// 调用Java类
val javaList = ArrayList<String>()
javaList.add("Kotlin")// 处理Java中的nullability
@Nullable String javaString = getNullableString();
val kotlinString: String? = javaString // 自动识别为可空类型
9.2 从Java调用Kotlin代码
Java也可以调用Kotlin代码:
// 调用Kotlin函数
List<Integer> list = CollectionsKt.listOf(1, 2, 3);// 调用Kotlin对象
Singleton.INSTANCE.doSomething();// 处理Kotlin中的伴生对象
String constant = MyClass.Companion.getCONSTANT();
9.3 互操作注意事项
- 属性访问:Kotlin属性会被编译为getter/setter方法
- 平台类型:Java类型在Kotlin中表示为"平台类型",如
String!
- 异常处理:Kotlin不强制处理Java检查异常
- SAM转换:Kotlin支持Java的函数式接口(Single Abstract Method)转换
第十章:Kotlin编码规范与最佳实践
10.1 命名规范
- 包名:全小写,不使用下划线
- 类名:大驼峰命名法
- 函数名:小驼峰命名法
- 常量名:全大写,下划线分隔
10.2 代码风格
- 使用4个空格缩进
- 类和方法的大括号换行
- 控制流语句的大括号不换行
- 链式调用使用换行对齐
10.3 最佳实践
- 优先使用val而不是var
- 使用数据类表示纯数据
- 避免使用!!非空断言
- 合理使用扩展函数
- 利用标准库函数简化代码
- 谨慎使用伴生对象
- 协程优于回调
10.4 性能考虑
- 序列(Sequence)用于大数据集
- 内联函数减少高阶函数开销
- 避免在热路径上创建过多对象
- 合理使用协程调度器
结语
Kotlin是一门现代、简洁且功能强大的编程语言,它结合了面向对象和函数式编程的特性,同时保持了与Java的完全互操作性。通过本指南,您已经学习了Kotlin的基础知识,包括语法、函数、类、空安全、集合、协程等重要概念。
要精通Kotlin,建议:
- 多实践,尝试用Kotlin重写现有的Java代码
- 学习Kotlin标准库中的扩展函数
- 探索Kotlin协程的高级用法
- 阅读优秀的Kotlin开源项目代码
- 关注Kotlin语言的更新和新特性
Kotlin正在快速发展,已经成为Android开发的官方语言,并在服务器端、前端和跨平台开发中占据越来越重要的地位。掌握Kotlin将为您的开发工作带来更高的效率和更好的编程体验。