文章目录
1. Scala 简介和安装
关于 Scala 的概述,这里引用维基百科
一门多范式的编程语言,设计初衷是要集成面向对象和函数式编程的各种特性
1.1 Scala 的特点
① 面向对象
Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由类和特质描述
② 函数式编程
Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化
③ 静态类型
Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性
④ 扩展性
Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构
⑤ 并发性
Scala使用Actor作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现
1.2 学习 Scala 的原因
- Spark 框架就是使用 Scala 写的,为了更好的学习 Spark ,Scala 是必须要熟悉并且精通的!
- Scala 是一门 Scalable Language,支持面向对象和函数式编程,十分有趣
- Scala 和 Java 十分 “亲近”,Scala 的创造者就是 Java 5.0 和 Java 8.0 的编译器的作者,熟悉 Scala 对于 Java 学习也会有一个更加深刻的理解
- 现在会 Scala 的人相对较少,而大数据领域 Spark 的地位又非常高,如果可以精通 Scala,那么对于个人发展也是帮助大大的:happy:
1.3 Java 和 scala 以及 JVM 的关系图
Scala 比较难学的原因主要是:
- 语法兼顾面向对象和函数式编程,比较容易混淆
- 部分支持 Java 的类库,又有自己的类库,还对 Java 的部分类库做了封装,查看 Scala 源码要求较高
- 由于是对 Java 的 “封装”,学习 Scala 的前提就是要会 Java?
1.4 Scala 学习建议
- 主要就是学习 Scala 的特殊语法
- 区别 Scala 和 Java
- 规范的使用 Scala 编写代码
只要按照以上三点学习,那么熟悉乃至精通 Scala 也就不在话下了~
1.5 安装 Scala
因为 Cris 使用的 Linux 桌面系统,所以安装方法和 Windows 不太一致,悉知~
这里给出 Scala 的官网
下载 tar.gz 包,然后解压到指定文件夹,注意:提前安装 jdk!
然后配置 /etc/profile
输入 scala -version
1.6 第一个 Scala 程序
首先使用 Vim 编写一个最简单的 Scala 程序
object testScala{
def main(args:Array[String]):Unit = {
System.out.println("hello,Scala")
}
}
然后使用 scalac 编译
使用 java 和 scala 同样可以执行
进一步证实了 Scala 语言编写的代码是基于 Java 的并且执行环境就是 JVM 虚拟机
1.7 IDEA 安装 Scala 插件
直接在 IDEA 的插件地址下载即可,注意:IDEA 版本和 Scala 插件的版本要一致!
安装完毕重启 IDEA 即可
让我们新建一个 Scala 项目
如果新建文件没有出现 scala 的选项,请参考
当然实际开发中都是建一个 Maven 项目
2. Scala 基础语法
2.1 反编译 Scala 代码了解运行原理
首先新建一个 Scala object
object Hello {
def main(args: Array[String]): Unit = {
println("hello,scala!")
}
}
直接执行可以得到 hello,scala!
的结果
我们再看看编译后的字节码文件
使用反编译软件打开这两个字节码文件
//说明一下scala程序的一执行流程
//1. object 在底层会生成两个类 Hello , Hello$
//2. Hello 中有个main函数,调用 Hello$ 类的一个静态对象 MODULES$
public final class Hello
{
public static void main(String[] paramArrayOfString)
{
Hello . M O D U L E .MODULE .MODULE.main(paramArrayOfString);
}
}
//3. Hello . M O D U L E .MODULE .MODULE 对象是静态的,通过该对象调用Hello$的main函数
public void main(String[] args)
{
Predef…MODULE$.println(“hello,scala”);
}
//4. 可以理解我们在main中写的代码在放在Hello$ 的main, 在底层执行scala编译器做了一个包装
如果使用 Java 代码模拟实现 Scala 程序的执行流程
/**
* 模拟 Scala 的运行流程
*
* @author cris
* @version 1.0
**/
public class Hello2 {
public static void main(String[] args) {
Hello2$.HELLO_$.hello();
}
}
final class Hello2$ {
public static Hello2$ HELLO_$;
static {
new Hello2$();
}
public void hello() {
System.out.println("hello,scala!");
}
private Hello2$() {
HELLO_$ = this;
}
}
至此,对于 Scala 的运行机制,我们应该有了一个简单的了解,并且为什么会编译出两个 Scala 的字节码文件也有了个认识 ?
2.2 Scala 执行流程图及开发规范
-
Scala源文件以 “.scala" 为扩展名
-
Scala程序的执行入口是main()函数
-
Scala语言严格区分大小写
-
Scala方法由一条条语句构成,每个语句后不需要分号(Scala语言会在每行后自动加分号),这也体现出Scala的简洁性
-
如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号
2.3 Scala 的特殊字符
object TestChar {
def main(args: Array[String]): Unit = {
println("name\tage") // name age
println("cirs\"18") // cirs"18
println("simida\\james") // simida\james
println("rose\ncurry")
println("abc\rk") // k,如果是 java,也是 k
}
}
2.4 关联源码包及文档
在使用scala过程中,为了搞清楚scala底层的机制,需要查看源码,下面看看如何关联和查看Scala的源码包
-
先要解压下载的 Scala 的源码包
-
将解压后的源码包移动到之前解压的 Scala 安装包路径下,然后打开 IDEA 关联即可
$ sudo mv scala-2.12.4/ /usr/local/scala/lib/
之后就可查看 Scala 的源码了
如果想要查看 Scala 的文档可以去官网查看,也可以下载下来
2.5 注释
用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;
注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现
Scala 中的注释分为三种:
-
单行注释:
// 打印一行文字 println("hello,scala!")
-
多行注释:
/* println("hello,scala!") println("hello,scala!") */
-
文档注释
/** * 打印名字的函数 * * @param name 名字 */ def say(name: String): Unit = { println(name) }
拓展:使用命令生成 Scala 的文档注释
然后查看文档
2.6 Scala语言输出的三种方式
- 字符串通过+号连接(类似java)
- printf用法 (类似C语言)字符串通过 % 传值
- 字符串通过$引用(类似PHP)
var name = "cris"
var salary = 28000.00
println("my name is " + name) // my name is cris
printf("my name is %s,and salary is %f\n", name, salary) // my name is cris,and salary is 28000.000000
print(s"my name is $name,and salary is $salary") // my name is cris,and salary is 28000.0