11.4 Scala:融合函数式与面向对象

Scala(Scalable Language,可伸缩语言)由马丁·奥德斯基(Martin Odersky)于2004年发布。它运行在JVM上,融合了函数式编程和面向对象编程。

scala
复制代码
// Scala代码示例

// Case class:不可变数据结构
case class User(name: String, age: Int, email: Option[String])

// Trait:类似接口但可以包含实现
trait Greeting {
  def greet(name: String): String = s"Hello, $name!"
}

object UserService extends Greeting {
  def findAdultUsers(users: List[User]): List[User] = {
    users.filter(_.age >= 18)  // 使用模式匹配和函数式操作
  }
  
  def getEmailSummary(users: List[User]): Map[String, String] = {
    users.flatMap { user =>
      user.email.map(email => user.name -> email)
    }.toMap
  }
}

// 使用隐式参数(现在使用given/using)
object MathUtils {
  given defaultPrecision: Int = 2
  
  def formatNumber(n: Double)(using precision: Int): String = {
    f"$n%.${precision}f"
  }
}

// 使用Future进行异步编程
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

object AsyncExample {
  def fetchUser(id: Int): Future[User] = Future {
    // 模拟数据库查询
    User(s"User$id", id, None)
  }
  
  def main(args: Array[String]): Unit = {
    val users = Future.sequence((1 to 10).map(fetchUser))
    users.foreach(println)
  }
}

Scala的特点:

  • JVM互操作:可以调用Java库
  • 模式匹配:强大的模式匹配支持
  • 隐式转换和类型类:强大的类型系统扩展
  • Actor模型:Akka框架支持并发编程