第六章:集合与函数式编程
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企服之家,中国第一个企服评测及商务社交产业平台。 |