Scala入门学习

88 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 29 天,点击查看活动详情

Scala入门学习



0. 写在前面

  • 操作系统:Windows10
  • JDK版本:jdk1.8
  • Maven版本:Maven-3.5.4
  • Scala版本:Scala-2.12.11
  • IDE工具:IntelliJ IDEA 2019.2.3

1. 概述

Scala官网:scala-lang.org/

1.png

1.1 什么是Scala

从英文的角度来讲,Scala并不是一个单词,而是Scalable Language两个单词的缩写,表示可伸缩语言的意思。从计算机的角度来讲,Scala是一门完整的软件编程语言,那么连在一起就表示Scala是一门可伸缩的软件编程语言。之所以说它是可伸缩,是因为这门语言体现了面向对象函数式编程等多种不同的语言范式,且融合了不同语言新的特性。

Scala编程语言是由联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计并开发的。由于Martin Odersky之前的工作是开发通用Java和Javac(Sun公司的Java编译器),所以基于Java平台的Scala语言于2003年底/2004年初发布。

1.2 Java and Scala

Martin Odersky(马丁·奥德斯基)是狂热的编译器爱好者,他经过长时间的编程后,希望开发一种语言,能够让写程序的过程变得简单,高效,所以当接触到Java语言后,感受到了这门语言的魅力,决定将函数式编程语言的特性融合到Java语言中,由此产生了2门语言(Pizza & Scala),这两种语言极大地推动了Java语言的发展

  • JDK1.5的泛型,增强for循环,自动类型转换等都是从Pizza语言引入的新特性
  • JDK1.8的类型推断,λ(lambda)表达式是从Scala语言引入的新特性

由上可知,Scala语言是基于Java开发的,所以其编译后的文件也是字节码文件,并可以运行在JVM中。

当然,Java和Scala还是有区别的,列举如下:

  • Scala 有一个简洁但可读的语法。
  • 虽然Scala是静态类型的,但通常感觉像是一种动态语言。
  • Scala 是一种纯粹的 OOP 语言,所以每个对象都是一个类的实例,而像运算符这样的符号实际上是方法;这意味着您可以创建自己的运算符++=
  • Scala 有一整套不可变的集合,包括 ListVector 和 不可变的 MapSet实现
  • Scala 中的所有内容都是表达式if语句、for循环、match表达式甚至try / catch表达式等构造都有返回值。
  • 默认情况下,Scala 习语倾向于不可变性:鼓励您使用不可变 () 变量和不可变集合final

2. Scala简单使用

2.1 Scala环境安装

  • 安装JDK 1.8(此处省略)

  • 安装Scala2.12

2.png

3.png

  • 环境测试

如果出现如下窗口内容,表示Scala环境安装成功

4.png

2.2 Scala插件安装

Scale的学习使用的是idea工具,默认情况下IDEA不支持Scala的开发,需要安装Scala插件。直接在idea软件中下载插件即可。

5.png

如果下载太慢或者因为idea版本而没有插件的,手动下载:plugins.jetbrains.com/plugin/1347…

导入方式

  • 进入plugins界面
  • 找到「instanlled」右边的设置按钮,点开选择 Install Plugin from Disk…
  • 展开选择浏览器下载的压缩包点击确定即可.
  • 重启idea

2.3 Scala第一个案例

  • 创建Maven项目:com.whybigdata.study(test项目名称)
  • 增加Scala框架支持

默认情况,IDEA中创建项目时不支持Scala的开发,需要添加Scala框架的支持。

6.png

  • 创建类

在main文件目录中创建Scala类:com.whybigdata.study.scala.HelloScala

package com.whybigdata.study.scala

object HelloScala {
  def main(args: Array[String]): Unit = {
    System.out.println("Hello Scala")
    println("Hello Scala")
  }
}
  • 代码解析

    • object
    • def
    • args : Array[String]
    • Unit
    • System.out.println
    • println

如果只是通过代码来进行语法的解析,并不能了解其真正的实现原理。scala语言是基于Java语言开发的,所以也会编译为class文件,那么我们可以通过反编译指令javap

javap -c -l 类名

7.png

或反编译工具jd-gui.exe查看scala编译后的代码:

8.png

全文结束!