Kotlin 面试题
目录

Kotlin 中 select 表达式的用法?

· 约 4 分钟读完 · 第 142 / 200 章

推荐答案

在 Kotlin 中,select 表达式用于在多个挂起函数之间进行选择。它通常与 Channel 或 Deferred 结合使用,允许你在多个挂起操作中选择第一个完成的操作。

在这个例子中,select 表达式会等待 channel1 和 channel2 中的第一个发送操作完成,并返回该操作的结果。

本题详细解读

select 表达式的基本用法

select 表达式允许你在多个挂起操作中选择第一个完成的操作。它通常用于以下场景:

  1. 多个 Channel 的选择:当你有多个 Channel 并且你想从第一个接收到数据的 Channel 中获取数据时,可以使用 select。
  2. 多个 Deferred 的选择:当你有多个 Deferred 并且你想等待第一个完成的 Deferred 时,可以使用 select。

select 表达式的语法

select 表达式的语法如下:

  • ReturnType 是 select 表达式的返回类型。
  • operation1, operation2 等是挂起操作,如 Channel 的 onReceive 或 Deferred 的 onAwait。
  • onXXX 是对应操作的挂起函数,如 onReceive 用于 Channel,onAwait 用于 Deferred。

示例解析

在推荐答案的示例中,我们创建了两个 Channel,并在两个不同的协程中分别向这两个 Channel 发送数据。select 表达式会等待这两个 Channel 中的第一个发送操作完成,并返回该操作的结果。

  • channel1.onReceive { it }:等待 channel1 接收到数据,并返回该数据。
  • channel2.onReceive { it }:等待 channel2 接收到数据,并返回该数据。

由于 channel1 的发送操作先完成,select 表达式会返回 channel1 发送的数据 1。

注意事项

  • select 表达式只能选择第一个完成的操作,其他未完成的操作会被取消。
  • select 表达式可以用于任何挂起操作,只要它们提供了相应的 onXXX 函数。

通过 select 表达式,你可以更灵活地处理多个并发操作,并选择最先完成的操作进行处理。