一、基础语法
1、Scala与Java的关系
- Scala是基于Java虚拟机,也就是JVM的一门编程语言
- 所以Scala的代码,都必须经过编译为字节码,然后交由Java虚拟机运行
- Scala和Java是可以无缝操作的,Scala可以任意调用Java的代码
2、安装
- 官方下载: http://www.scala-lang.org/download/
- 在windows命令行内即可直接键入scala,打开scala命令行,进行scala编程。
3、解释器
- REPL: Read(取值)->Evaluation(求值)->Print(打印)->Loop(循环)。
Scala解释器也被称为REPL,会快速编译Scala代码为字节码,然后交给JVM执行。 - 计算表达式: 在Scala>命令行内,键入Scala代码,解释器会直接返回结果,如果没有指定变量来存放这个值,默认值为res,而且会显示结果的数据类型,比如Int、Double、String等。
- 内置变量: 在后面可以继续使用res这个变量,以及它存放的值。
- 自动补全: Tab键
4、声明变量
1)val变量(常量)
可以声明变量用来存放表达式的计算结果,值无法改变,但是可以继续使用
2)var变量(变量)
声明变量,值可以改变,通常不建议使用
在Java的大型复杂系统的设计和开发中,也使用了类似的特性,我们通常会将传递给其他模块 / 组件 / 服务的对象,设计成不可变类(Immutable Class)。在里面也会使用java的常量定义,比如final,阻止变量的值被改变。从而提高系统的健壮性(robust,鲁棒性)和安全性。
3)指定类型
声明变量可以手动指定类型,如果不指定会自动根据值进行类的推断
4)声明多个变量
5、数据类型与操作符
1)基本数据类型
Byte、Char、Short、Int、Long、Float、Double、Boolean
- Scala与Java的基本数据类型大致相同,但是没有基本数据类型与包装类型的概念,统一都是类。
- Scala自己会负责基本数据类型和引用类型的转换操作
- 使用以上类型,直接就可以调用大量函数
2)类型的加强板类型
- Scala类使用很多加强类给数据类型增加了上百种增强的功能或函数。
- String类通过StringOps类增强了大量的函数
#例:取相同的字母
- Scala还提供了RichInt、RichDouble、RichChar等类型,RichInt就提供了to函数,1.to(10),此处Int先隐式转换为RichInt,然后再调用其to函数
3)基本操作符
- scala的算术操作符与java的算术操作符也没有什么区别,比如+、-、*、/、%等,以及&、|、^、>>、<<等。
- 但是,在scala中,这些操作符其实是数据类型的函数,比如1 + 1,可以写做1.+(1)
- scala中没有提供++、–操作符,我们只能使用+和-,比如counter = 1,counter++是错误的,必须写做counter += 1.
6、函数调用与apply()函数
1)函数调用方式
如果调用时,不需要传递参数,则Scala允许调用时省略括号
2)apply函数
- Scala中的apply函数是非常特殊的一种函数,在Scala的object中,可以声明apply函数。而使用“类名()”的形式,其实就是“类名.apply()”的一种缩写。通常使用这种方式来构造类的对象,而不是使用“new 类名()”的方式。
- 例如,“Hello World”(6),因为在StringOps类中有def apply(n: Int): Char的函数定义,所以"Hello World"(6),实际上是"Hello World".apply(6)的缩写。
- 例如,Array(1, 2, 3, 4),实际上是用Array object的apply()函数来创建Array类的实例,也就是一个数组。