电脑工场
白蓝主题五 · 清爽阅读
首页  > 软件入门

Scala函数实战例子:从超市收银到天气预报,5个真实场景代码

Scala 光看语法容易懵,不如直接上手几个小任务——比如算购物小票、过滤天气数据、统计日志错误次数。下面这几个例子,都是日常开发里真会写的代码,不绕弯,不炫技。

1. 计算购物小票(map + reduce)

你刚写完一个超市收银系统,每件商品是 (name, price, qty),要算总价:

val items = List(("苹果", 5.8, 3), ("牛奶", 12.5, 2), ("面包", 8.0, 1))
val total = items.map { case (name, price, qty) => price * qty }.sum
println(s"应付:¥$total") // 输出:应付:¥47.4

2. 筛选高温天气(filter + case class)

拿到一组城市温度数据,只想看今天超过 35℃ 的地方:

case class Weather(city: String, temp: Double)
val forecasts = List(Weather("北京", 36.2), Weather("上海", 32.8), Weather("广州", 37.1))
val hotCities = forecasts.filter(_.temp > 35.0).map(_.city)
println(hotCities) // List(北京, 广州)

3. 统计日志中的 ERROR 行数(foldLeft)

运维同事甩来一串日志,你想快速知道报错几回:

val logs = List("INFO: app started", "ERROR: db timeout", "WARN: retrying", "ERROR: auth failed")
val errorCount = logs.foldLeft(0) { (acc, line) =>
  if (line.startsWith("ERROR:")) acc + 1 else acc
}
println(s"共 $errorCount 处错误") // 共 2 处错误

4. 把用户昵称转成首字母大写(高阶函数 + map)

后台导出的昵称全小写,前端要求每个单词首字母大写:

def capitalizeWords(s: String): String = 
  s.split(" ").map(_.capitalize).mkString(" ")

val names = List("zhang san", "li si", "wang wu")
val formatted = names.map(capitalizeWords)
println(formatted) // List( Zhang San, Li Si, Wang Wu )

5. 模拟异步请求结果处理(Option + for 表达式)

调用第三方 API 返回可能为空的数据,用 Option 安全处理:

def fetchUser(id: Int): Option[String] = id match {
  case 101 => Some("张工")
  case 102 => Some("李姐")
  case _   => None
}

val result = for {
  name <- fetchUser(101)
  suffix = "-已认证"
} yield name + suffix

println(result.getOrElse("用户不存在")) // 张工-已认证

这些例子没用任何框架,纯 Scala 标准库搞定。你复制粘贴进 REPL 就能跑,改两行就能用在自己项目里。函数不是为了装酷,是让代码更短、更稳、改起来不心慌。