渐进式编程课
Kotlin 目录
第 20 课2026.09.28

在同一处展示状态文字,并只为有具体错误消息的失败状态显示重试提示。

第 20 课:组合状态文案与重试提示

  • 日期:2026-09-28
  • 课程序号:第 20 课
  • 知识点:组合已有状态映射结果

用途或适用场景

在同一处展示状态文字,并只为有具体错误消息的失败状态显示重试提示。

核心概念

保持 label 与 canRetry 的原有规则,用一个显示函数组合二者,不复制状态判断逻辑。

最小代码或操作示例

kotlin
sealed interface State {
    data object Loading : State
    data class Ready(val count: Int) : State
    data class Error(val message: String) : State
}
fun label(state: State) = when (state) {
    State.Loading -> "加载中"
    is State.Ready -> "共 ${state.count} 节"
    is State.Error -> state.message.ifBlank { "加载失败" }
}
fun canRetry(state: State) = state is State.Error && state.message.isNotBlank()
fun display(state: State): String =
    label(state) + if (canRetry(state)) " · 可重试" else ""
fun main() {
    println(display(State.Error("网络失败"))) // 网络失败 · 可重试
    println(display(State.Error("  "))) // 加载失败
}

3~5 分钟练习

传入 State.Ready(3),预测显示文字。

参考答案

输出“共 3 节”;canRetry 为 false,不会追加重试提示。

与上一课的联系

沿用第 17 课的 label 和第 19 课的 canRetry;本课只新增 display 组合两者;下一课可把显示结果和重试布尔值分别交给真正的界面组件。

时效校验

时效校验:2026-09-28(已打开 Kotlin 当前 when/if 与类型检查官方文档;data object 需 Kotlin 1.9+,组合写法未见废弃标记)。

官方参考