Scala 基础语法
以下是 Scala 基础语法的中文讲解,内容简洁明了,涵盖核心概念和常见用法,适合初学者快速上手。Scala 结合了面向对象和函数式编程,语法简洁且灵活。如果需要更深入的示例或特定主题讲解,请告诉我!
Scala 基础语法
1. 基本结构
Scala 程序通常以 object
定义入口点,类似 Java 的 main
方法。例如:
object HelloWorld {
def main(args: Array[String]): Unit = {
println("Hello, Scala!")
}
}
object
:定义单例对象,相当于 Java 的静态类。def main
:程序入口,args
是命令行参数,Unit
表示无返回值(类似 Java 的void
)。println
:标准输出函数。
保存为 HelloWorld.scala
,编译并运行:
scalac HelloWorld.scala
scala HelloWorld
2. 变量与常量
Scala 有两种变量类型:
val
:不可变变量(常量),定义后值不可更改。var
:可变变量,值可重新赋值。
val name: String = "Scala" // 不可变,类型可省略(类型推断)
var age: Int = 25 // 可变
age = 26 // 正确
// name = "Java" // 错误:val 不可重新赋值
- 类型推断:Scala 编译器会自动推断变量类型,
val x = 10
等价于val x: Int = 10
。 - 推荐使用
val
,符合函数式编程的不可变性原则。
3. 基本数据类型
Scala 的数据类型与 Java 类似,均为对象,常见类型包括:
- 数值:
Byte
,Short
,Int
,Long
,Float
,Double
- 字符:
Char
- 布尔:
Boolean
- 字符串:
String
val num: Int = 42
val pi: Double = 3.14
val flag: Boolean = true
val text: String = "Hello"
4. 函数定义
Scala 支持函数式编程,函数是核心概念。
- 普通函数:
def add(a: Int, b: Int): Int = {
a + b
}
println(add(3, 4)) // 输出: 7
- 简写(单行函数):
def multiply(x: Int, y: Int): Int = x * y
- 匿名函数:
val double = (x: Int) => x * 2
println(double(5)) // 输出: 10
- 高阶函数:接受函数作为参数或返回函数。
def applyFunc(x: Int, f: Int => Int): Int = f(x)
println(applyFunc(5, x => x * x)) // 输出: 25
5. 控制结构
- 条件语句:
val x = 10
if (x > 0) {
println("Positive")
} else if (x == 0) {
println("Zero")
} else {
println("Negative")
}
- if 作为表达式(有返回值):
val result = if (x > 0) "Positive" else "Non-positive"
println(result) // 输出: Positive
- 循环:
for
循环:
for (i <- 1 to 5) println(i) // 输出: 1, 2, 3, 4, 5
while
循环:
var i = 0
while (i < 3) {
println(i)
i += 1
}
- 列表推导式:
val evens = for (i <- 1 to 10 if i % 2 == 0) yield i
println(evens) // 输出: Vector(2, 4, 6, 8, 10)
6. 集合操作
Scala 提供丰富的集合类型(如 List
, Array
, Set
, Map
),支持函数式操作。
- List(不可变):
val numbers = List(1, 2, 3, 4)
val doubled = numbers.map(_ * 2) // 高阶函数,输出: List(2, 4, 6, 8)
val filtered = numbers.filter(_ > 2) // 输出: List(3, 4)
- Map:
val scores = Map("Alice" -> 90, "Bob" -> 85)
println(scores("Alice")) // 输出: 90
- 常用操作:
map
,filter
,fold
,reduce
等。
7. 类与对象
Scala 支持面向对象编程,类和对象定义如下:
class Person(name: String, age: Int) {
def greet(): String = s"Hello, I'm $name, $age years old"
}
val p = new Person("Alice", 25)
println(p.greet()) // 输出: Hello, I'm Alice, 25 years old
- Case Class(简化类定义,适合数据建模):
case class Point(x: Int, y: Int)
val p1 = Point(1, 2) // 无需 new
println(p1.x) // 输出: 1
8. 模式匹配
模式匹配是 Scala 的强大特性,类似增强的 switch
:
val x: Any = 42
x match {
case i: Int => println(s"Integer: $i")
case s: String => println(s"String: $s")
case _ => println("Unknown")
}
// 输出: Integer: 42
9. 异常处理
Scala 使用 try-catch
处理异常,catch
使用模式匹配:
try {
val result = 10 / 0
} catch {
case e: ArithmeticException => println("Divide by zero!")
case e: Exception => println("Other error")
} finally {
println("Done")
}
10. REPL 交互式环境
Scala 提供 REPL(Read-Eval-Print Loop)环境,运行 scala
命令进入,适合快速测试:
scala> val x = 10
x: Int = 10
scala> println(x * 2)
20
学习建议
- 实践:在 REPL 中试验代码,或用 IntelliJ IDEA 创建项目。
- 函数式思维:多练习
map
,filter
等函数式操作。 - 参考资源:
- 官方文档:https://www.scala-lang.org/
- Scala Exercises (https://www.scala-exercises.org/)
- 《Programming in Scala》by Martin Odersky
示例程序
综合示例,展示变量、函数和集合操作:
object Demo {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3, 4, 5)
val sum = numbers.reduce(_ + _)
println(s"Sum: $sum") // 输出: Sum: 15
numbers.foreach(n => println(s"Number: $n"))
}
}
如果需要更详细的某一方面(如函数式编程、并发模型)或具体代码示例,请告诉我!