数据学习从0到1 Scala基础语法(五)

97 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第31天 juejin.cn/post/716729…

Tuple

Tuple:称之为元组,它与Array类似,都是不可变的,但与数组不同的是元组可以包含不同类型的元素

Tuple中的元素角标从 1 开始

注意:目前 Scala 支持的元组最大长度为 22 ,对于更大长度可以使用集合或数组

演示一下

总结

前面讲了很多集合体系中的数据结构,有的是可变的,有的是不可变的,有的是既是可变的又是不可变的,听起来有点乱,在这里我们总结一下

可变集合:LinkedHashSet、ListBuffer、ArrayBuffer、LinkedHashMap

不可变集合:List、SortedMap

可变+不可变集合:Set、HashSet、SortedSet、Map、HashMap

还有两个编外人员:

Array、Tuple

Array:长度不可变,里面的元素可变

Tuple:长度不可变,里面的元素也不可变

Scala中函数的使用

前面我们学习了Scala集合体系中的一些数据结构,下面我们来学习一下Scala中函数的使用

先来看一下函数的定义

在Scala中定义函数需要使用 def 关键字,函数包括函数名、参数、函数体

Scala要求必须给出函数所有参数的类型,但是函数返回值的类型不是必须的,因为Scala可以自己根据函数体中的表达式推断出返回值类型。

函数中最后一行代码的返回值就是整个函数的返回值,不需要使用return,这一点与Java不同,java中函数的返回值是必须要使用return的

下面来实现一个单行函数和多行函数

  1. 单行函数

  1. 多行函数

函数的参数

  1. 默认参数
  2. 在Scala中,有时候我们调用某些函数时,不希望给出参数的具体值,而是希望使用参数自身默认的值,此时就需要在定义函数时使用默认参数。
  3. 如果给出的参数不够,则会从左往右依次应用参数。

java的写法:

scala写法:

特殊的函数-过程

在Scala中,定义函数时,如果函数体直接在花括号里面而没有使用=连接,则函数的返回值类型就是Unit,这样的函数称之为过程

过程通常用于不需要返回值的函数

过程还有一种写法,就是将函数的返回值类型显式定义为Unit

比较一下这四种写法的区别

前面两种写法的效果是一样的,都是函数

后面两种写法的效果是一样的,都是过程

lazy

Scala提供了lazy特性,如果将一个变量声明为lazy,则只有在第一次使用该变量时,变量对应的表达式才会发生计算

什么场景下需要使用lazy特性呢?

这种特性对于特别耗时的操作特别有用,比如打开文件这个操作。

即使D://test.txt文件不存在,代码也不会报错,只有变量使用时才会报错,这就是lazy这个特性。