📜  scala 教程 - Scala (1)

📅  最后修改于: 2023-12-03 15:34:50.982000             🧑  作者: Mango

Scala 教程 - Scala

Scala 是一种支持多范式编程的编程语言,其编程范式包括面向对象编程、函数式编程、并发编程和命令式编程。它是一种强类型的语言,具有类型推断、高阶函数、代数数据类型等特性,并且基于 Java 平台。

安装 Scala

在使用 Scala 之前需要先安装其解释器。在 Windows 平台下,可以从官方网站下载预编译版的 Scala 包:https://www.scala-lang.org/download/。解压后,将解压后的目录添加到系统环境变量里即可开始使用 Scala。

Scala 基础语法

Scala 的语法基本上和 Java 类似,在此提供一些 Scala 的基本语法:

变量和数据类型

在 Scala 中,定义一个变量时需要指明其数据类型,但是你也可以使用类型推断,让 Scala 推断出变量的类型。

val name: String = "Scala"
val age = 10

上面的代码定义了两个变量,一个是 String 类型的 name,另一个是根据 Scala 类型推断出来的 Int 类型的 age 变量。

函数

在 Scala 中,你可以使用 def 关键字来定义函数。

def sayHello(name: String): Unit = {
  println("Hello " + name)
}

上面的代码定义了一个名为 sayHello 的函数,该函数有一个参数 name,参数类型为 String。在函数中使用 Unit 作为该函数的返回类型,表示该函数没有返回值。

对象与类

Scala 是一种面向对象的编程语言,因此它支持类和对象的概念。

class Person(name: String, age: Int) {
  def getName(): String = {
    name
  }
  
  def getAge(): Int = {
    age
  }
}

val person = new Person("Scala", 10)
println(person.getName()) // Output: Scala
println(person.getAge()) // Output: 10

上面的代码先定义了一个名为 Person 的类,该类有两个属性 name 和 age,分别表示人的姓名和年龄。然后在类中定义了两个方法 getName 和 getAge 用于获取这两个属性的值。最后通过 new 关键字创建了一个 Person 对象,分别调用 getName 和 getAge 获取该对象的姓名和年龄。

控制结构

Scala 支持 Java 中的所有控制结构,如 if-else、while、do-while、for 循环等。Scala 还支持更加强大的控制结构,如 match、for 表达式等。

val num = 2
if (num > 0) {
  println("Positive")
} else if (num < 0) {
  println("Negative")
} else {
  println("Zero")
}

var i = 0
while (i <= 10) {
  println(i)
  i += 1
}

for (i <- 1 to 10) {
  println(i)
}

上面的代码展示了 Scala 中的 if-else、while、for 循环的使用方法。

Scala 高级语法
类型推断

Scala 中可以使用类型推断,让编译器推断出变量的类型。

val x = 10 // This will be Int
val str = "Hello" // This will be String

上面的代码中没有显式指定变量的类型,但是编译器会自动推断出变量的类型。在 Scala 中,类型推断可以减少一些重复的代码,提高代码的简洁性。

高阶函数

Scala 中的函数是一等公民,就是说函数像其他值一样可以被传递、保存和返回。高阶函数是指可以接受一个或多个函数作为参数,并且可以返回一个函数的函数。

def apply(f: Int => String, v: Int) = f(v)
val f = (x: Int) => x.toString
val result = apply(f, 10)
println(result)

上面的代码定义了一个名为 apply 的函数,该函数接受一个函数 f 和一个整数参数 v,并且将这个参数传递给函数 f。最后将 f(v) 的结果作为 apply 的返回值。

模式匹配

Scala 中的模式匹配是一种非常强大的功能。它可以根据某些形式的值来匹配对应的操作。

val weekday = 1
weekday match {
  case 1 => println("Monday")
  case 2 => println("Tuesday")
  case 3 => println("Wednesday")
  case 4 => println("Thursday")
  case 5 => println("Friday")
  case 6 | 7 => println("Weekend")
  case _ => println("Invalid Number")
}

上面的代码使用 match 关键字将 weekday 的值与不同的情况进行匹配。如果 weekday 的值是 1,那么就会输出 Monday。

隐式类

Scala 中的隐式类是可以被用来封装一些想要扩展的特性的类。

implicit class StringToInt(str: String) {
  def toInt(radix: Int): Int = Integer.parseInt(str, radix)
}

println("10".toInt(2)) // Output: 2

上面的代码中定义了一个名为 StringToInt 的隐式类,该类有一个 toInt 方法用于将字符串转换成整数。

总结

Scala 是一种功能强大的编程语言,支持多范式编程,可以适用于各种不同的编程场景。本篇教程简要介绍了 Scala 的基础语法和高级语法,希望能对大家有所帮助。