1、Scala简介
Scala是一种多范式
的编程语言,其设计的初衷是要集成面向对象
编程和函数式
编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。它也能运行于CLDC配置的Java ME中。目前还有另一.NET平台的实现,不过该版本更新有些滞后。Scala的编译模型(独立编译,动态类加载)与Java和C#一样,所以Scala代码可以调用Java类库(对于.NET实现则可调用.NET类库)。Scala包括编译器和类库,以及BSD许可证发布。
学习Scala编程语言,为后续学习Spark奠定基础。
2、Scala安装与配置
安装:
Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机,推荐安装JDK1.8。
在 http://www.scala-lang.org/ 下载Scala2.11.8程序安装包
根据不同的操作系统选择不同的安装包,下载完成后,将安装包解压到安装目录。
注意:安装时,安装路径中
不能含有空格
。
将scala安装目录下的bin目录加入到PATH环境变量:
SCALA_HOME:
SCALA_HOME= D:\scala-2.11.8
PATH:
在PATH变量中添加:%SCALA_HOME%\bin
完成以上流程后,在命令行输入:scala
,进入如下界面:
注意:该操作Windows和Linux配置流程是一样的。可以参考Java的JDK的配置过程。
到此为止,Scala的安装已经成功。
配置IDEA:
(1)打开IDEA工具,如图:点击Configure
(2)点击Plugins
(3)在搜索栏里输入:scala
(4)下载后,应用并重启IDEA即可
(5)创建Maven项目
创建的maven项目默认是不支持scala的,需要为项目添加scala的framework,如图:
在这里选择Scala后,在右边的Use library中配置你的安装目录即可,最后点击OK。
(6)在项目的目录结构中,创建scala文件夹,并标记为source(file-project structure)
(7)以上配置都完成后,就可以在scala上点击右键创建scala class了
3、Scala的运行环境
REPL(Read Evaluate Print Loop):命令行
IDE:图形开发工具
The Scala IDE (Based on Eclipse):http://scala-ide.org/
IntelliJ IDEA with Scala plugin:http://www.jetbrains.com/idea/download/
Netbeans IDE with the Scala plugin
4、Scala的常用数据类型
注意:在Scala中,任何数据都是对象。例如:
(1)数值类型:Byte,Short,Int,Long,Float,Double
Byte: 8位有符号数字,从-128 到 127
Short: 16位有符号数据,从-32768 到 32767
Int: 32位有符号数据
Long: 64位有符号数据
例如:
val a:Byte = 10
a+10
得到:res9: Int = 20
这里的res9是新生成变量的名字
val b:Short = 20
a+b
注意:在Scala中,定义变量可以不指定类型,因为Scala会进行
类型的自动推导
。
(2)字符类型和字符串类型:Char和String
对于字符串,在Scala中可以进行插值操作。
注意:
前面有个s;相当于执行:"My Name is " + s1
(3)Unit类型:相当于Java中的void类型
(4)Nothing类型:一般表示在执行过程中,产生了Exception
例如,我们定义一个函数如下:
5、Scala变量的申明和使用
(1)使用val和var申明变量
例如:scala> val answer = 8 * 3 + 2
可以在后续表达式中使用这些名称
val:常量
var:变量
6、Scala的函数和方法的使用
(1)可以使用Scala的预定义函数
例如:求两个值的最大值
(2)使用def关键字自定义函数
语法:
示例:
7、Scala的条件表达式
Scala的if/else语法结构和Java或C++一样。
不过,在Scala中,if/else是表达式,有值,这个值就是跟在if或else之后的表达式的值。
8、Scala的循环
Scala拥有与Java和C++相同的while和do循环
Scala中,可以使用for和foreach进行迭代
(1)使用for循环案例:
注意:
<- 表示Scala中的generator,即:
提取符
第三种写法是第二种写法的简写
(2)在for循环中,还可以使用yield
关键字来产生一个新的集合
在上面的案例中,我们将list集合中的每个元素转换成了大写,并且使用yield关键字生成了一个新的集合。
(3)使用while循环:注意使用小括号,不是中括号
(4)使用do … while循环
(5)使用foreach进行迭代
注意:在上面的例子中,foreach接收了另一个函数(println)作为值
9、Scala函数的参数
Scala中,有两种函数参数的求值策略
Call By Value
:对函数实参求值,且仅求一次
Call By Name
:函数实参每次在函数体内被用到时都会求值
10、Scala的Lazy值(懒值)
当val被申明为lazy时,它的初始化将被推迟,直到我们首次对它取值。
一个更为复杂一点的例子:读取文件:
11、异常的处理
Scala异常的工作机制和Java或者C++一样。直接使用throw关键字抛出异常。
12、Scala中的数组
Scala数组的类型:
定长数组:使用关键字Array
变长数组:使用关键字ArrayBuffer
遍历数组:
Scala数组的常用操作:
Scala的多维数组:
和Java一样,多维数组是通过数组的数组来实现的。也可以创建不规则的数组,每一行的长度各不相同。
13、映射
映射就是Map集合,由一个(key,value)组成。
-> 操作符用来创建
例如:
val scores = Map(“Alice” -> 10,”Bob” -> 3,”Cindy” -> 8)
映射的类型分为:不可变Map
和可变Map
映射的操作:
获取映射中的值
更新映射中的值(必须是可变Map)
迭代映射
14、元组(Tuple)
元组是不同类型的值的聚集。
例如:
val t = (1, 3.14,"Fred") // 类型为Tuple3[Int, Double,java.lang.String]
这里:Tuple是类型,3是表示元组中有三个元素。
元组的访问和遍历:
注意:要遍历Tuple中的元素,需要首先生成对应的
迭代器
。不能直接使用for或者foreach
。