scala超级入门 1

142 阅读2分钟

定义变量 val和var

val 和 var。val 等同于 Java 中的 final 变量,一旦被初始化,就不能再被重新赋值了。相反地,var 是非 final 变量,可以重复被赋值。

变量类型

可以显式标注,也可以不标注。

变量后面可以跟“冒号 + 类型”,以显式标注变量的类型。

var a:Long = 1L
var b = 2L

定义函数def


// 结尾的“Int =”组合表示 max 函数返回一个整数。
def max(x: Int, y: Int): Int = {
  if (x > y) x
  else y
}

函数返回值

在 Scala 中,函数体具体代码块最后一行的值将被作为函数结果返回。

在这个例子中,if 分支代码块的最后一行是 x,因此,此路分支返回 x。同理,else 分支返回 y。

:具体类型

例如: Int 表示返回是整数

:Unit 无返回

:Unit 类似Java的void关键字,无返回

入参默认值

  // 这里参数suffix的默认值是"",即空字符串
  // 函数结尾处的Unit类似于Java中的void关键字,表示该函数不返回任何结果
def deleteIndicesIfExist( baseFile: File, suffix: String = ""): Unit = {
  info(s"Deleting index files with suffix $suffix for baseFile $baseFile")
  val offset = offsetFromFile(baseFile)
  Files.deleteIfExists(Log.offsetIndexFile(dir, offset, suffix).toPath)
  Files.deleteIfExists(Log.timeIndexFile(dir, offset, suffix).toPath)
  Files.deleteIfExists(Log.transactionIndexFile(dir, offset, suffix).toPath)
}
//下面这2种方式调用都是允许的
deleteIndicesIfExist(baseFile) // OK
deleteIndicesIfExist(baseFile, ".swap") // OK

元组Tuple

元组是承载数据的容器,一旦被创建,就不能再被更改了。

val a = (1, 2.3, "hello", List(1,2,3)) 

image.png

控制语句

循环

常见的循环有两种写法:命令式编程方式和函数式编程方式

val list = List(1, 2, 3, 4, 5)
for (element <- list) println(element)
list.foreach(e => println(e))
list.foreach(println)

image.png

image.png

case类

普通类类似,Case 类非常适合用来表示不可变数据。同时,它最有用的一个特点是,case 类自动地为所有类字段定义 Getter 方法,这样能省去很多样本代码。

使用Java定义一个平面上的点:

public final class Point {
  private int x;
  private int y;
  public Point(int x, int y) {
    this.x = x;
    this.y = y;
  }
  // setter methods......
  // getter methods......
}

使用Scala:

case class Point(x:Int, y: Int) // 默认写法。不能修改x和y
case class Point(var x: Int, var y: Int) // 支持修改x和y

这是在极客时间打卡的2月第2天;

参考文章 带你快速入门Scala语言