Scala语法基础

Scala是一种结合了面向对象和函数式编程特性的多范式语言,运行在JVM上。以下是Scala的主要语法要点:

1. 变量声明

复制代码
// 不可变变量(推荐)
val name: String = "Alice"  // 显式类型声明
val age = 25                // 类型推断

// 可变变量
var count: Int = 0
count += 1

2. 基本数据类型

Scala的所有类型都是对象,没有原始类型:

复制代码
val b: Byte = 1
val i: Int = 123
val l: Long = 123456789L
val f: Float = 3.14f
val d: Double = 3.14
val c: Char = 'A'
val bool: Boolean = true
val s: String = "Hello"

3. 函数定义

复制代码
// 方法定义
def add(x: Int, y: Int): Int = {
  x + y
}

// 简写形式
def multiply(x: Int, y: Int) = x * y

// 无参函数
def greet(): Unit = println("Hello!")

// 高阶函数
def applyFunc(f: Int => Int, x: Int) = f(x)

4. 控制结构

复制代码
// if-else表达式(有返回值)
val max = if (a > b) a else b

// while循环
while (condition) {
  // 代码
}

// for表达式
for (i <- 1 to 5) println(i)  // 1到5
for (i <- 1 until 5) println(i) // 1到4

// 带条件的for
for {
  i <- 1 to 3
  j <- 1 to 3
  if i == j
} println(s"($i, $j)")

// for推导式(yield)
val squares = for (i <- 1 to 5) yield i * i

5. 集合

复制代码
// 列表(List)
val nums = List(1, 2, 3)
val doubled = nums.map(_ * 2)

// 集(Set)
val unique = Set(1, 2, 2, 3)  // Set(1, 2, 3)

// 映射(Map)
val ages = Map("Alice" -> 25, "Bob" -> 30)
val aliceAge = ages("Alice")

// 元组(Tuple)
val pair = (1, "one")
println(pair._1)  // 1
println(pair._2)  // "one"

6. 类和对象

复制代码
// 类定义
class Person(val name: String, var age: Int) {
  // 方法
  def greet(): String = s"Hello, I'm $name"
  
  // 重写toString
  override def toString = s"Person($name, $age)"
}

// 创建实例
val p = new Person("Alice", 25)
println(p.name)  // Alice
p.age = 26       // 可变字段

// 单例对象
object Logger {
  def log(message: String): Unit = println(s"LOG: $message")
}
Logger.log("Starting app")

7. 模式匹配

复制代码
val x: Any = 123

x match {
  case i: Int => println("整数")
  case s: String => println("字符串")
  case _ => println("其他")
}

// case类匹配
case class Point(x: Int, y: Int)
val p = Point(1, 2)

p match {
  case Point(0, 0) => println("原点")
  case Point(x, 0) => println(s"x轴上的点$x")
  case _ => println("其他位置")
}

8. 特质(Trait)

类似Java的接口,但可以有实现:

复制代码
trait Greeter {
  def greet(name: String): Unit
  def defaultGreet(): Unit = println("Hello!")
}

class FriendlyGreeter extends Greeter {
  def greet(name: String) = println(s"Hello, $name!")
}

9. 隐式转换

复制代码
implicit def intToString(x: Int): String = x.toString

def printString(s: String) = println(s)
printString(123)  // 自动调用intToString

10. 未来和并发

复制代码
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

val f = Future {
  // 异步计算
  Thread.sleep(1000)
  42
}

f.onComplete {
  case Success(value) => println(s"Got $value")
  case Failure(e) => println(s"Error: $e")
}

Scala还有更多高级特性如类型参数、协变/逆变、宏等,这些是基础语法要点。

相关推荐
We་ct4 分钟前
LeetCode 212. 单词搜索 II:Trie+DFS 高效解法
开发语言·算法·leetcode·typescript·深度优先·图搜索算法·图搜索
OxyTheCrack9 分钟前
【C++】简述main函数中的argc与argv
开发语言·c++
颜酱12 分钟前
环检测与拓扑排序:BFS/DFS双实现
javascript·后端·算法
历程里程碑16 分钟前
Linux 49 HTTP请求与响应实战解析 带http模拟实现源码--万字长文解析
java·开发语言·网络·c++·网络协议·http·排序算法
ZVAyIVqt0UFji17 分钟前
高可用虚拟IP(HaVip)技术详解:原理、设计与应用
开发语言·网络·网络协议·tcp/ip·perl
code_YuJun18 分钟前
数据库事务
后端
飞Link18 分钟前
深度解析 TS2Vec:时序表示学习中的层次化建模(Hierarchical Contrastive Learning)
开发语言·python·学习·数据挖掘
爱炸薯条的小朋友20 分钟前
C#依赖注入和仿写Prism注入
开发语言·c#
代码探秘者21 分钟前
【Java集合】ArrayList :底层原理、数组互转与扩容计算
java·开发语言·jvm·数据库·后端·python·算法
泰式大师22 分钟前
别再让 Agent 靠感觉改计划了:我把 Replan 做成了一个可计数的系统事件
后端