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 的任务。若重复不合法,应主动验证,而不是让查找顺序决定业务正确性。
文章回复
0 条公开回复