qidao123.com技术社区-IT企服评测·应用市场
标题:
Kotlin基础知识全面解析(下)
[打印本页]
作者:
花瓣小跑
时间:
2025-4-26 13:16
标题:
Kotlin基础知识全面解析(下)
第六章:集合与函数式编程
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) // 5
substring(1, 3) // 返回"el"
}
复制代码
with函数
val numbers = mutableListOf(1, 2, 3)
with(numbers) {
println(size) // 3
add(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将为您的开发工作带来更高的效率和更好的编程体验。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/)
Powered by Discuz! X3.4