目录
一、Scala简介
(一)Scala概述
(二)函数式编程
(三)Scala特性
1、一切都是对象
2、一切都是函数
3、一切都是表达式
(四)在线运行Scala
二、选择Scala版本
三、Windows上安装Scala
(一)到Scala官网下载Scala
(二)安装Scala
(三)配置Scala环境变量
(四)测试Scala是否安装成功
1、查看Scala版本
2、启动Scala,执行语句
四、Linux上安装Scala
(一)到Scala官网下载Scala
(二)安装Scala
1、登录ied虚拟机
2、上传scala安装包到ied虚拟机
3、解压scala安装包到指定目录
(三)配置Scala环境变量
(四)测试Scala是否安装成功
1、查看Scala版本
2、启动Scala,执行语句
五、Scala的使用
(一)交互模式
1、命令行方式
2、文件方式
1、创建源程序
2、编译成字节码
3、解释执行对象
一、Scala简介
(一)Scala概述
Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式编程风格。Christopher Diggins认为:
不太久之前编程语言还可以毫无疑意地归类成“命令式”或者“函数式”或者“面向对象”。Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。
根据David Rupp在博客中的说法,Scala可能是下一代Java。这么高的评价让人不禁想看看它到底是什么东西。
Scala有几项关键特性表明了它的面向对象的本质。例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。
与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。Scala允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。Scala称之为mixin类组合。
Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、柯里化(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。
Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。Scala当前版本还不能在.NET上运行(虽然上一版可以-_-b),但按照计划将来可以在.NET上运行。
Scala可以与Java互操作。它用scalac这个编译器把源文件编译成Java的class文件(即在JVM上运行的字节码)。你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。用David Rupp的话来说,
它也可以访问现存的数之不尽的Java类库,这让(潜在地)迁移到Scala更加容易。
这让Scala得以使用为Java1.4、5.0或者6.0编写的巨量的Java类库和框架,Scala会经常性地针对这几个版本的Java进行测试。Scala可能也可以在更早版本的Java上运行,但没有经过正式的测试。Scala以BSD许可发布,并且数年前就已经被认为相当稳定了。
(二)函数式编程
函数式编程:将所有复杂的问题的解决,拆分为若干函数的处理。每一个函数可以去实现一部分功能,利用很多次函数的处理,最终解决问题。
函数式编程相对于面向对象编程,更加抽象,好处是,代码可以非常简洁,更多采用常量而不是变量来解决问题,这样额外带来的好处:在线程并发时,可以减少甚至杜绝多线程并发安全问题,特别适合于应用在处理高并发场景、分布式场景下的问题。函数式编程可以使用高阶函数,函数是一等公民,可以更加灵活的进行程序的编写。
函数式编程并不是面向对象编程的发展,而是另外一种解决问题的思路,两者之间也并没有绝对的好坏之分,在不同的场景中各有各的优缺点。
(三)Scala特性
“scala语言的基本特性:简洁、兼容、可扩展和静态类型 Scala是Scalable Language的简称,是一种函数式面向对象语言。其中所有的基本数据类型都是面向对象的。Scala的函数式编程思路可以让代码编写更加简洁,并且Scala的静态类型可以在编译时检查代码的安全性和一致性,有助于避免复杂应用程序中的错误。 scala是面向对象的,函数式编程语言,具有较强的交互性”
1、一切都是对象
Scala
里一切都是对象,这大概和Python
很像,因为即便是数字1
都有一系列的方法,所以我们可以调用1.toDouble
将Int
类型的1
转换为Double
类型的1
。
2、一切都是函数
表现为可以重载操作符,跟Python
很像,在一定程度上Scala
是Java
和Python
生的孩子,只不过遗传基因比较大的卵子是Java
提供的,而比较小的那颗精子则是Python
提供的。
3、一切都是表达式
在Scala
里,一切都是表达式,即使像if(){}else{}
这样的语句块也是有返回值的。
(四)在线运行Scala
通过浏览器访问:Scala在线工具
单击【点击运行】按钮,可以查看代码运行结果
大家可以对照一下Java
的HelloWorld
二、选择Scala版本
我们在ied
虚拟机上安装的是Spark2.4.4,为了后续操作不出现任何匹配方面的问题,建议采用跟Spark版本匹配的Scala。
程序,两者完全一一对应,相似度极高
三、Windows上安装Scala
(一)到Scala官网下载Scala
Scala2.11.12下载网址:
单击【iscala-2.11.12.ms】超链接,将scala安装程序下载到本地
(二)安装Scala
双击安装程序图标,进入安装向导,按提示进行操作,完成Scala的安装
(三)配置Scala环境变量
设置Windows系统的环境变量
通常Scala安装完成后会自动将Scala的bin目录的路径添加到系统Path变量中。若Path变量中无该路径,则需要手动添加。
(四)测试Scala是否安装成功
1、查看Scala版本
启动命令行窗口,执行scala -version
命令,若能正确输出当前Scala版本信息,则说明安装成功
2、启动Scala,执行语句
在命令行提示后输入scala
,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序
val - value:用于定义Scala常量
var - variable:用于定义Scala变量
常量只能赋值一次,再次赋值是不允许的
Scala里val定义的变量相当于Java里用final定义的变量,其实都是常量,不能再给它赋值
定义一个Scala变量x
,初值为666,重新赋值为999
四、Linux上安装Scala
(一)到Scala官网下载Scala
Scala2.11.12下载网址:
单击【scala-2.11.12.tgz】超链接,将scala安装包下载到本地
(二)安装Scala
1、登录ied虚拟机
在win7虚拟机上利用FinalShell登录ied虚拟机
2、上传scala安装包到ied虚拟机
进入/opt目录,将scala安装包上传到该目录
3、解压scala安装包到指定目录
执行命令:tar -zxvf scala-2.11.12.tgz -C /usr/local
(三)配置Scala环境变量
执行命令:vim /etc/profile
export SCALA_HOME=/usr/local/scala-2.11.12
export PATH=$SCALA_HOME/bin:$PATH
存盘退出后,执行命令:source /etc/profile
,让环境配置生效
(四)测试Scala是否安装成功
1、查看Scala版本
执行scala -version
命令,若能正确输出当前Scala版本信息,则说明安装成功
2、启动Scala,执行语句
在命令行提示后输入scala
,则会进入Scala的命令行模式,在此可以编写Scala表达式和程序
演示语句块的返回值

演示if结构的返回值
五、Scala的使用
Scala可以在交互模式
和编译模式
两种方式下运行
(一)交互模式
在命令行下直接敲命令或通过命令直接执行程序文件
1、命令行方式
直接在scala>
提示符后敲代码执行
在scala>
提示符之后输入:quit
,退出scala交互模式
2、文件方式
将代码写在xxx.scala
文件中,通过scala xxx.scala
执行文件中的代码
创建/scala_work
目录,进入该目录,执行命令:vim sum.scala
执行命令:scala sum.scala
(二)编译模式
将代码写在.scala文件中,通过编译命令将.scala编译为.class,然后去解释执行。在.scala文件中编写好代码,创建对象,包含入口函数。通过scalac 或 fsc 命令进行编译,产生对应的.class文件。再通过scala命令来解释执行对象。scalac 和 fsc 都可以进行编译工作,区别是fsc会启动后台服务常驻系统后台,这样后续再进行编译的时候,速度就可以很快。
1、创建源程序
在\scala_work
目录里创建文件HelloWorld.scala
2、编译成字节码
利用scalac
将HelloWorld.scala
编译成字节码文件HelloWorld.class
查看生成的同名字节码文件
3、解释执行对象
执行命令:scala HelloWorld
,运行程序,查看结果