Scala入门
Scala入门
1. 概述
1.1 为什么学习Scala
Spark—新一代内存级大数据计算框架,是大数据的重要内容。
Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。
Spark的兴起,带动Scala语言的发展!
1.2 Scala发展史
联邦理工学院的马丁·奥德斯基(Martin Odersky)于2001年开始设计Scala。
马丁·奥德斯基是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一种语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。Pizza和Scala
极大地推动了Java编程语言的发展。
JDK5.0 的泛型、增强for循环、自动类型转换等,都是从Pizza引入的新特性。
JDK8.0 的类型推断、Lambda表达式就是从Scala引入的特性。
JDK5.0和JDK8.0的编辑器就是马丁·奥德斯基写的,因此马丁·奥德斯基一个人的战斗力抵得上一个Java开发团队。
1.3 Scala和Java 关系
1.4 Scala语言特点
Scala是一门以Java虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的 静态类型编程语言(静态语言需要提前编译的如:Java、c、c++等,动态语言如:js)。
Scala是一门
多范式的编程语言
,Scala支持面向对象
和函数式编程
。(多范式,就是多种编程方法的意思。有面向过程、面向对象、泛型、函数式四种程序设计方法。)Scala源代码(.scala)会被编译成Java字节码(.class),然后运行于JVM之上,并
可以调用现有 的Java类库,实现两种语言的无缝对接
。Scala单作为一门语言来看,非常的
简洁高效
。Scala在设计时,马丁·奥德斯基是参考了Java的设计思想,可以说Scala是源于Java,同时马丁·奥 德斯基也加入了自己的思想,将函数式编程语言的特点融合到JAVA中, 因此,对于学习过Java的同学, 只要在学习Scala的过程中,搞清楚Scala和Java相同点和不同点,就可以快速的掌握Scala这门语言。
2. 环境搭建
2.1 文件下载
官网下载地址:All Available Versions | The Scala Programming Language (scala-lang.org)
2.2 安装
确保已安装Java8;
java -version
下载对应的Scala 安装文件 scala-2.12.11.zip , 解压到需要安装的目录
配置环境变量:
- SCALA_HOME:
D:\Develop\Scala\scala-2.12.11
- 配置
%SCALA_HOME%\bin
检查是否配置成功:命令行输入
scala
, 成功进入scala控制台。退出控制台:
:quit
- SCALA_HOME:
2.3 测试(命令行执行)
- 需求:计算两数 a 和b 的和。
步骤:
在键盘上同时按win+r 键,并在运行窗口输入cmd 命令
输入Scala 并按回车键,启动 Scala 环境。然后定义两个变量,并计算求和。
- 打印:println()
2.4 Java源文件编写和运行
- Java代码:
public class HelloJava {
public static void main(String[] args) {
System.out.println("hello java!");
}
}
- 编译字节码
javac
javac HelloJava.java
编译后生成文件 HelloJava.class
- 运行
java HelloJava
结果:
hello java!
2.5 Scala源文件编写和运行
- scala代码
object HelloScala{
def main(args: Array[String]):Unit = {
println("hello scala!");
}
}
Scala中
;
可以去掉。java不能忽略
- 编译字节码:
scalac
scalac HelloScala.scala
编译后生成文件 HelloScala.class
、HelloScala$.class
- 运行
scala HelloScala
结果:
hello scala!
2.6 Scala编译结果的反编译深入分析
- 使用java的形式来执行编译后的scala字节码文件
- 反编译
本次使用反编译工具:jd-gui.exe
HelloScala. 是指:HelloScala$
- java形式引用scala环境变量的形式来执行编译后的scala字节码文件
java -cp %SCALA_HOME%/lib/scala-library.jar; HelloScala
3. 在IDE中编写Scala
3.1 创建项目
- 创建项目
- Scala插件安装
Settings->Plugins->Marketplace: 搜索 scala
- 在main下新建目录scala、配置为
Sources Root
- 选中当前项目,右键“Add Frameworks Support”(添加框架支持)
3.2 编写项目
- 创建目录
- 创建scala代码文件
- 编写代码和运行
object HelloWorld {
def main(args: Array[String]): Unit = {
println("hello world!")
// 直接使用java写法
System.out.println("hello world from java")
}
}
- 代码中的关键字
object:关键字,声明一个单例对象(伴生对象)
main:从外部可以直接调用执行的方法。
def main(args: Array[String]): Unit = {}:def 方法名称(参数名称:参数类型):返回值类型 =
scala与java参数类型与名称想反。
- java: String str
- scala:str: Array[String]
Scala完全面向对象,故Scala去掉了Java中非面向对象的元素,如static关键字,void类型
static:Scala无static关键字,由object实现类似静态方法的功能(类名.方法名)。class关键字和Java中的class关键字作用相同,用来定义一个类;
void:对于无返回值的函数,Scala定义其返回值类型为Unit类。
public:scala中没有public关键字,如果不声明访问权限,那么就是公共的