🔌 Kotlin

线程与协程

1.线程 使用 lambda 创建线程。 fun main() { val thread = Thread { println("Hello from thread!") } thread.start() println("Hello from main thread!") } 2.协程 引入依赖 implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core" 2.1 suspend suspend 是 Kotlin 中用于定义挂起函数(suspend functions)的关键字。挂起函数是可以被挂起和恢复的函数,它们只能在协程或另一个挂起函数中调用。 特点: 非阻塞的异步执行:挂起函数可以在协程中暂停其执行,并在需要时恢复执行,而不阻塞当前线程。这使得异步编程更加简单和直观。 只能在协程或挂起函数中调用:挂起函数不能直接在普通函数中调用,必须在协程上下文中调用。 示例: import kotlinx.coroutines.* suspend fun performTask() { delay(1000L) // 挂起1秒 println("Task completed") } fun main() = runBlocking { println("Starting task...") performTask() // 调用挂起函数 println("Task finished") } performTask 是一个挂起函数,通过 delay 模拟了异步任务的执行。它不会阻塞线程,而是挂起并在 1 秒后恢复执行。 2.2 runBlocking runBlocking 是一种用于启动协程并阻塞当前线程的函数。它通常用于非协程环境中(如主函数或测试代码)来启动协程,并等待其完成后再继续执行后续代码。

更多 →

September 12, 2024

扩展函数

1.builtin extension function let: 用于处理可能为 null 的对象,并且仅当对象非 null 时才执行 Lambda。 with: 提供一个上下文对象来简化对对象成员的访问。 run: 结合了 with 和 let 的功能,可以用于 null 对象,并返回 Lambda 的结果。 apply: 用于对象的初始化,返回对象本身。 also: 执行副作用操作,返回对象本身。 takeIf/takeUnless: 根据条件反对对象或null 1.1 let 用法: 常用于安全调用(例如处理可空类型)。 返回值: lambda 表达式的结果。 this指代: 作为 it 传递。 示例: val name: String? = "Kotlin" name?.let { println("Length: ${it.length}") } 1.2 with 用法: 适用于对同一个对象进行多次操作。 返回值: lambda 表达式的结果。 this指代: 直接作为 this 使用。 示例: val builder = StringBuilder() val result = with(builder) { append("Hello, ") append("World!

更多 →

September 12, 2024