Scala 基础语法
Scala 基础语法
简介
Scala 是一种混合了面向对象编程和函数式编程思想的编程语言,它在 JVM 上运行,支持 Java 代码的互操作性。Scala的语法简洁、灵活,在大数据、机器学习、Web应用等领域有广泛的应用。
变量定义
Scala 可以使用 val 或 var 关键字定义变量。val 定义的变量不可重新赋值,相当于常量。var 定义的变量可重新赋值。
val x: Int = 1 // 定义不可变整型变量 x,初始值为 1
var y: String = "hello" // 定义可变字符串变量 y,初始值为 "hello"
可以使用类型推断,省略变量类型:
val x = 1 // 自动推断变量类型为 Int
var y = "hello" // 自动推断变量类型为 String
数据类型
Scala 数据类型可以分为基于值的类型和基于引用的类型。基于值的类型包括数字类型、布尔类型和字符类型。基于引用的类型包括类、数组和集合等。
数字类型
Scala 支持的数字类型包括整型、浮点型和字符类型。
整型
Scala 支持的整型包括 Byte、Short、Int、Long 和 Char。它们的取值范围分别是 -128~127、-32768~32767、-2147483648~2147483647、-9223372036854775808~9223372036854775807 和 0~65535。
val a: Byte = 10
val b: Short = 1000
val c: Int = 10000
val d: Long = 100000L
浮点型
Scala 支持的浮点型包括 Float 和 Double。
val a: Float = 1.23f
val b: Double = 3.14
字符类型
Scala 的字符类型是 Char,表示一个 Unicode 字符。
val a: Char = 'A'
布尔类型
Scala 的布尔类型是 Boolean,取值为 true 或 false。
val a: Boolean = true
val b: Boolean = false
字符串类型
Scala 的字符串类型是 String。
val a: String = "hello"
控制结构
Scala 的控制结构包括 if-else 语句、while 循环语句、for 循环语句和 match 表达式语句。
if-else 语句
Scala 中的 if-else 语句与 Java 中的 if-else 语句类似。
val x = 10
if (x < 20) {
println("x 小于 20")
} else {
println("x 大于等于 20")
}
while 循环语句
Scala 中的 while 循环语句与 Java 中的 while 循环语句类似。
var x = 10
while (x > 0) {
println(x)
x -= 1
}
for 循环语句
Scala 中的 for 循环语句与 Java 中的 for 循环语句类似,可以遍历任何集合。
for (i <- 1 to 3) {
println(i)
}
match 表达式语句
Scala 中的 match 表达式语句与 Java 中的 switch 语句类似,但是更加强大且可以处理更多的情况。
val x = 10
val s = x match {
case 1 => "一"
case 2 => "二"
case _ => "其他"
}
println(s)
函数
Scala 中的函数使用 def 关键字定义,参数列表放在圆括号中,返回类型放在圆括号后面,函数体放在花括号中。
def add(x: Int, y: Int): Int = {
x + y
}
println(add(1, 2)) // 输出 3
Scala 中的函数也可以使用嵌套定义。
def add(x: Int, y: Int): Int = {
def sum(z: Int): Int = {
if (z == 0) {
0
} else {
z + sum(z - 1)
}
}
x + y + sum(x + y)
}
println(add(1, 2)) // 输出 9
类与对象
Scala 是一种面向对象编程语言,类和对象是 Scala 编程的基本单位。Scala 中的类定义使用 class 关键字,对象的定义使用 object 关键字。类可以包含成员变量和成员方法,对象可以包含单例方法。
class Person(name: String, age: Int) {
def getName(): String = name
def getAge(): Int = age
}
object Main {
def main(args: Array[String]): Unit = {
val p = new Person("Tom", 20)
println(p.getName() + " " + p.getAge())
}
}
继承与多态
Scala 中的继承与多态与 Java 中的继承与多态类似,一个子类可以继承一个父类,一个子类实例可以赋值给一个父类变量。
class Person(name: String, age: Int) {
def getName(): String = name
def getAge(): Int = age
}
class Student(name: String, age: Int, school: String) extends Person(name, age) {
def getSchool(): String = school
}
object Main {
def main(args: Array[String]): Unit = {
val p: Person = new Student("Tom", 20, "Fudan")
println(p.getName() + " " + p.getAge())
}
}
尾递归
Scala 的尾递归函数可以避免因递归调用过多而导致的栈溢出等问题。可以通过 @tailrec 注解来表示一个函数是尾递归函数。
import scala.annotation.tailrec
object Main {
def factorial(n: Int): Int = {
@tailrec
def helper(acc: Int, n: Int): Int = {
if (n == 0) {
acc
} else {
helper(acc * n, n - 1)
}
}
helper(1, n)
}
def main(args: Array[String]): Unit = {
println(factorial(5)) // 输出 120
}
}
总结
本文介绍了 Scala 的基础语法,包括变量定义、数据类型、控制结构、函数、类与对象、继承与多态和尾递归。Scala 具有语法简洁、灵活等特点,适用于大数据、机器学习、Web 应用等领域。