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 应用等领域。