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"))
  }
}

如果需要更详细的某一方面(如函数式编程、并发模型)或具体代码示例,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注