CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Scala 语言入门/课时/OOP 与模式匹配
RawBlame
课时目录12 节

Scala 语言入门

  1. 01Scala 是什么
  2. 02基础语法
  3. 03OOP 与模式匹配
  4. 04集合与高阶函数
  5. 05函数式编程
  6. 06类型系统
  7. 07构建工具
  8. 08后端框架
  9. 09数据与 JSON
  10. 10测试
  11. 11并发与流
  12. 12综合练习

OOP 与模式匹配

Class、Trait、Case Class、match。

35 分钟

OOP 与模式匹配

Scala 的面向对象以 Class / Trait / Object 为核心,Case Class 提供不可变数据载体,match 表达式替代冗长的 if-else 与 instanceof。对照 /roadmaps/scala「OOP & Pattern Matching」节点。

学习目标

  • 定义 class、trait、object 并理解单例与伴生对象
  • 使用 case class 与 case object 建模数据
  • 用 match 做结构化模式匹配与解构

核心概念

Class、Trait 与 Object

trait Greeter:
  def greet(name: String): String

class ConsoleGreeter(prefix: String) extends Greeter:
  def greet(name: String): String = s"$prefix, $name!"

object Greeter:
  def default: Greeter = ConsoleGreeter("Hello")

val g = Greeter.default
println(g.greet("Scala"))

Trait 类似 Java interface(可有实现);object 是单例,伴生对象常放工厂方法与 apply。

Case Class 与模式匹配

enum Status:
  case Pending, Running, Done

case class Bookmark(id: Long, url: String, title: String)

def describe(b: Bookmark): String = b match
  case Bookmark(id, url, _) if url.startsWith("https") =>
    s"secure#$id"
  case Bookmark(id, _, title) =>
    s"$title ($id)"

def next(s: Status): Status = s match
  case Status.Pending  => Status.Running
  case Status.Running  => Status.Done
  case Status.Done     => Status.Done

val bm = Bookmark(1L, "https://example.com", "Example")
println(describe(bm))
println(next(Status.Pending))

Scala 3 的 enum 替代部分 sealed trait + case object 写法;match 必须覆盖所有分支(编译器可检查 exhaustiveness)。

apply、copy 与伴生

case class User(name: String, email: String)

object User:
  def apply(email: String): User =
    User(email.takeWhile(_ != '@'), email)

val u1 = User("alice", "alice@example.com")
val u2 = User("bob@example.com")   // 伴生 apply
val u3 = u1.copy(name = "Alice Wang")

println(u2.name)
println(u3)

Case class 自动生成 equals/hashCode/toString/copy;适合 DTO 与领域模型。

与 Java 对照

ScalaJava
traitinterface + default 方法
object
静态成员类 / 单例
case classrecord(Java 16+)
matchswitch + pattern(Java 21+)
enum(Scala 3)enum(Java 5+)

Java record 与 Scala case class 理念接近,但 Scala 与 match、函子生态结合更深。

练习

  • 用 enum 定义订单状态并实现 canCancel(status): Boolean
  • 为 Bookmark 写 match 分支处理空 title
  • 对比 Java record 与 Scala case class 的 API 差异

小结

Case class + match 是 Scala 建模与分支的核心组合。 下一课集合与高阶函数。见 scala-essentials。

加载本节练习…
← 上一课基础语法下一课 →集合与高阶函数