Scala 3 入门:第一个 Scala 程序
用 Scala 3.3.6 和 sbt 搭建的入门 Demo,展示 Scala 语言基础语法、JVM 互操作性和函数式编程思维。
Scala 3 入门:第一个 Scala 程序
背景
Scala 是一门兼具面向对象和函数式编程特性的语言,运行在 JVM 上。学习 Scala 是为了理解函数式编程范式,以及后续学习 Spark(Scala 是 Spark 的原生语言)。
为什么学 Scala
- Spark 原生语言:Spark 的 DataFrame/Dataset API 用 Scala 编写最自然
- 函数式编程思维:不可变数据结构、高阶函数、模式匹配——这些概念对写出高质量 Java 代码也有帮助
- 类型系统强大:Scala 3 比 Scala 2 的类型系统更简洁,学习曲线更平缓
- JVM 生态:可以和 Java 库无缝互操作
Scala 3 新语法
Scala 3(Dotty)相比 Scala 2 有显著变化,语法更简洁:
// Scala 2 风格
def add(x: Int, y: Int): Int = {
return x + y
}
// Scala 3 风格(花括号变缩进,return 可省略)
def add(x: Int, y: Int): Int = x + y
// 更简短的写法(类型推断)
def add(x: Int, y: Int) = x + y
基本语法对比(Java vs Scala)
// 1. 变量定义
val x = 5 // 不可变(final),推荐使用
var y = "hello" // 可变
// 2. 函数是一等公民
val square = (x: Int) => x * x // 匿名函数
List(1,2,3).map(square) // 高阶函数
// 3. 模式匹配(取代 switch)
def describe(x: Any): String = x match {
case 1 => "one"
case "hello" => "greeting"
case _ => "something else"
}
// 4. 样例类(case class)
// 自动生成 equals、hashCode、toString、copy
case class User(name: String, age: Int)
val user = User("Alice", 30)
val older = user.copy(age = 35) // 不可变修改
与 Java 的互操作
Scala 可以直接调用 Java 库:
import java.util.ArrayList
val list = new ArrayList[String]()
list.add("hello")
list.add("world")
反过来,Java 也可以调用 Scala 类(前提是编译后的 class 文件在 classpath 上)。
函数式编程核心概念
不可变性: 默认 val(不可变引用),所有集合默认不可变。修改返回新集合,原集合不变。
val nums = List(1, 2, 3)
val doubled = nums.map(_ * 2) // nums 不变,doubled = List(2, 4, 6)
高阶函数: 函数可以作为参数传递
def processNumbers(nums: List[Int], f: Int => Int): List[Int] =
nums.map(f)
processNumbers(List(1,2,3), _ * 3) // List(3, 6, 9)
总结
Scala 的学习重点不是语法细节,而是函数式编程思维。理解了 map/flatMap/filter/fold 这些高阶函数的用法,再看 Spark 的 transformation/action 就一目了然。Scala 3 的语法比 Scala 2 友好很多,入门门槛已经大幅降低。