DevCN
菜单
全部文章快讯开发科技深度热点

Scala Option:处理查找不到任务的正常分支

通过 find 查找任务,用 Some 与 None 表示结果,练习模式匹配和默认展示,避免直接 get 引发失败。


本节目标

通过 find 查找任务,用 Some 与 None 表示结果,练习模式匹配和默认展示,避免直接 get 引发失败。

环境与运行方法

本组使用 Scala 2.13 与 JDK 21。保存为 Lesson.scala,执行 scalac Lesson.scala 后运行 scala Lesson。不需要 sbt 或第三方库。

核心思路

找不到任务是正常业务情况,不应伪装为空标题或 null。Option 将存在与不存在显式分开,调用者再决定是否显示缺失提示或终止后续操作。

完整示例

object Lesson {
  case class Task(id: Int, title: String)
  def main(args: Array[String]): Unit = {
    val tasks = List(Task(1, "read"), Task(2, "review"))
    for (id <- List(2, 9)) {
      val label = tasks.find(_.id == id) match {
        case Some(task) => task.title
        case None => "missing"
      }
      println(label)
    }
    println(tasks.find(_.id == 9).map(_.title).getOrElse("untitled"))
  }
}

预期输出

review
missing
untitled

逐步理解

find 返回首个匹配项,如果 ID 要唯一,应在入口保证唯一性。模式匹配把存在性检查与取值放在同一处,减少遗漏分支。

map 只对 Some 内部执行转换,None 保持不存在。getOrElse 的默认字符串只是展示文案,不代表真的找到任务,不应拿它继续执行需要实体 ID 的写入逻辑。数据存在性和界面展示需要分别考虑。

常见问题与边界

  • get 在 None 上会失败。
  • 默认标题不能代替存在性检查。
  • Option 不会消除重复 ID。

动手练习

追加另一个 id=2 的任务,观察 find 结果。

参考答案

仍然返回列表中第一个 id=2 的任务。若重复不合法,应主动验证,而不是让查找顺序决定业务正确性。

DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。