文章目录
- 1. Scala
- 2. Scala 基础概念
- 2.1 开发和运行环境
- 2.2 与Java相同之处
- 2.3 变量
- 2.3.1 内置类型
- 2.3.1.1 BigInt和BigDecimal
- 2.3.1.2 String和Char
- 2.4 流程控制
- 2.5 模式匹配
- 2.6 异常捕获
- 2.7 循环
- 2.7.1 for 循环
- 2.7.2 while 循环
- 2.8 函数
- 2.8.1 匿名方法
- 2.9 集合类型
- 2.9.1 List
- 2.9.2 Map
- 2.9.3 ArrayBuffer
- 2.9.4 Vector
- 2.9.5 Set
- 2.9.6 Tuples
- 2.9.7 常用的集合函数
- 2.10 Class(类)
- 2.10.1 构造函数
- 2.10.2 this
- 2.10.3 枚举类(trait)
- 2.10.4 伴生对象(object)
- 2.10.5 样例类(case)
- 2.10.6 样例对象
- 2.11 Traits
- 2.11.1 trait
- 2.11.2 抽象类
- 2.12 函数式编程
- 2.12.1 纯函数
- 2.12.2 传递函数
- 2.12.3 没有NULL值
1. Scala
Scala 是一种高级语言,其将【面向对象】和【函数式编程】相结合。
scala 代码和 java 代码不一样:编译器做了很多事情
- java 中变量类型需要明文给出
- scala 中可以对变量类型进行推断(防止运行期报错)
Scala的六大特性:
- 开发环境:JDK + SDK(编译器)
- 运行环境:JDK + JRE
注释、命名(驼峰标识)、输出(简化为:println、print)等
只有两种变量类型:
- val:表示一种不可变变量,类似于 Java 中的 final,在 scala 中推荐使用该变量
- var:表示一种可变变量,建议在有特定需要的情况下使用
Scala 中的数据类型都是对象,而不是基本类型,内置的数据类型有(、、、、、、、、,其中
Int和
Double是默认的类型),以下是特殊类型的介绍。
2.3.1.1 BigInt和BigDecimal
blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">
对于大数字,可以使用 BigInt 和 BigDecimal 类型
/blockquote>
举例:
2.3.1.2 String和Char
blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">
使用双引号括住字符串,使用单引号括住字符:
/blockquote>
(连接符号、字符串插值):
:
- 在字符串前加上字母 ‘f’,就可以在字符串内部使用 printf 样式的格式设置
- raw 插值不会执行字符串中的转义字符
- 可以自定义字符串插值…
blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">
【面向表达式编程】当编写的每个表达式都返回一个值时,这种风格被称为面向表达式的编程或 EOP。相反,不返回值的代码被称为语句,用于产生其他效果。
/blockquote>
Scala的控制结构类似于
Java中的 。if 结构总是会返回一个结果,这个结果可以选择忽略,也可以将结果赋给一个变量,写作三元运算符:
Scala
中有
match表达式,类似于中的 语句。不过scala更强,支持任何数据类型、表达式可以有返回值以及强大的模式匹配(感觉有点类似于自然语言了)。
Scala
的异常捕获由 结构完成:
Scala
中的循环用来迭代集合中的元素,通常这样写:
函数的定义方式:
- def 是用来定义函数的关键字
- sum 是函数名
- 输入参数 a 的类型是 Int
- 输入参数 b 的类型是 Int
- Int 是函数的返回值类型
- = 左侧是函数名和函数签名
- = 右侧是函数体
- 匿名函数可以作为代码段编写
- 匿名函数经常和集合中的 map、filter 等方法一起使用
blockquote style="margin-top: 5px; margin-bottom: 5px; padding-left: 1em; margin-left: 0px; border-left: 3px solid rgb(238, 238, 238); opacity: 0.6;">
Map 和 Set 都有可变和不可变两种版本
/blockquote>
List
是一个线性的、不可变的序列,即一个无法修改的链表,想要添加或删除 List 元素时,都要从现有 List 中创建一个新 List。
Map
是由键和值组成的可迭代序列。Scala 中的 Map 类似于 Java 的 HashMap。
ArrayBuffer
是一个可变序列,可以使用它的方法来修改它的内容:
Vector
是一个索引的、不可变序列,索引意味着可以通过索引值快速访问,其他方面与 List 类似:
Set
是一个没有重复元素的可迭代集合。同时拥有可变和不可变的 Set 类,默认是不可变的。
可变Set:
foreach
:该函数对列表进行遍历操作,同时可以传入函数参数,对每个元素执行该函数
filter
:该函数用于对列表元素进行过滤
map
:将传入的函数作用于列表中的每个元素,为每个元素返回一个新的、转换后的值
head
:返回第一个元素
tail
:返回 head 元素之后的每一个元素
take
:将元素从集合中提取出来
takeWhile
:将符合条件的元素从集合中提取出来
drop
:将指定元素之外的元素从集合中提取出来
dropWhile
:将条件之外的元素从集合中提取出
reduce
:接收一个函数,并将函数作用于集合的后续元素
foldLeft
:支持传入一个种子值,然后在其基础上进行计算操作
注意:不需要创建"get"和"set"方法来访问类中的字符
在 Scala 中,一个类的主构造函数是以下的组合
:
字段,所以是可变的,如果没有手动指定,那么默认是
val字段,且默认是
private;
,其他函数中的参数都是
val类型。
声明的字段
类似于 Java 静态代码块,在类首次实例化时分配:
,每个参数会生成访问方法;
纯函数应该有以下特点:
Scala 中 "scala.math._package"中的如下方法都是纯函数:
当然,Scala 中有很多非纯函数,如 foreach:
非纯函数通常有以下特点:
Option/Some/Nothing
这样的结构进行处理。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/925.html