第1章 Scala入门

第1章 Scala入门

1.1 概述

The Scala Programming Language

Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

1.1.1 什么是Scala

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

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

截至到2020年8月,Scala最新版本为2.13.3,支持JVM和JavaScript

Scala官网:https://www.scala-lang.org/

1.1.2 为什么学习Scala

在之前的学习中,我们已经学习了很长时间的Java语言,为什么此时要学习一门新的语言呢?主要基于以下几个原因:

  1. 大数据主要的批处理计算引擎框架Spark是基于Scala语言开发的

  2. 大数据主要的流式计算引擎框架Flink也提供了Scala相应的API

  3. 大数据领域中函数式编程的开发效率更高,更直观,更容易理解

1.1.3 Java and Scala

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

l JDK1.5的泛型,增强for循环,自动类型转换等都是从Pizza语言引入的新特性

l JDK1.8的类型推断,λ(lambda)表达式是从Scala语言引入的新特性

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

1.2 快速上手

下载地址:

https://www.scala-lang.org/download/all.html

1.2.1 Scala环境安装

  1. 安装JDK 1.8(略)

  2. 安装Scala2.12

  • 解压文件:scala-2.12.11.zip,解压目录要求无中文无空格
  • 配置环境变量
  1. 环境测试

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

scala

1.2.2 Scala插件安装

默认情况下IDEA不支持Scala的开发,需要安装Scala插件。

如果下载慢的,请访问网址:https://plugins.jetbrains.com/plugin/1347-scala/versions

1.2.3 Hello Scala案例

  1. 创建Maven项目
  1. 增加Scala框架支持

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

  1. 创建类

在main文件目录中创建Scala类:com.wolffy.bigdata.scala.Scala01_HelloWorld

object Scala01_HelloWorld {
 def main(args: Array[String]): Unit = {
 System.out.println("Hello Scala World")
 }
}
  1. 代码解析
/
scala语言是基于java语言开发的
package : java中的包
object : 声明一个对象,在编译时,会编译为两个类文件
 这个声明的对象的类型为:当前类型+$
 User user = new User();
 user.setName
 Scala02_HelloWorld = new Scala02_HelloWorld$()
Scala02_HelloWorld : 对象名称
def : 声明方法的关键字
main : scala程序的入口方法名
() : 方法参数列表
args: Array[String] : 参数
 java => String[] args => java是一个强类型的语言
 scala => args: Array[String]
 args : 参数名
 Array[String] : 参数类型
 : => 分隔符
Array[String] : Array是一个数组类型
 scala语言是一个完全面向对象的语言,所以万物皆对象
 数组也是对象,也有自己的类型:Array,这里的中括号表示泛型
 String[] => [Ljava.lang.String@343434
: Unit => scala => 名称:类型
 => 参数名:参数类型
 => 变量名:变量类型
 => 方法名:方法的返回值类型
 Unit表示返回值类型,Unit类型是scala中新的类型,为了代替void关键字,表示没有返回值
 = : 赋值
 User user = new User();
 user.xxx
 user.yyy
 public void test() = {
 sout("123")
 }
 test()
System.out.println("Hello Scala World") : java代码
 scala语言是基于java语言开发的,所以大部分的java代码可以直接在scala中使用
代码可以不需要分号结尾: scala推荐一行代码中只有一个逻辑,那么分号可以省略
 /

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

javap -c -l 类名
javap -v 类名

思考两个问题:

  • 设置path,classpath环境变量的作用?
  • IDEA中哪里是classpath?
  1. 源码关联

在使用Scala过程中,为了搞清楚Scala底层的机制,需要查看源码,那么就需要关联和查看Scala的源码包。

作者:BigdataReasearcher原文地址:https://www.cnblogs.com/bdreasearch/p/16364622.html

%s 个评论

要回复文章请先登录注册