学 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 就能跑,改两行就能用在自己项目里。函数不是为了装酷,是让代码更短、更稳、改起来不心慌。