欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

1.Scala入门

时间:2023-06-22
文章目录

Scala入门

1、Scala语言诞生小故事2、Scala和 Java以及jvm的关系3、Scala 语言的特点4、Windows下搭建Scala开发环境5、Linux下搭建Scala开发环境

Scala的REPL 6、Scala 开发工具的介绍7、Scala程序反编译-说明Scala程序的执行流程

HelloScalaHelloScala$ 8、Scala 程序开发注意事项(重点)9、Scala语言输出的三种方式10、Scala 源码的查看的关联11、注释12、Scala编码风格

正确的缩进和空白(同Java)Scala官方编程指南 13、本章小结 ☆ Scala入门

Spark—新一代内存级大数据计算框架,是大数据的重要内容。Spark就是使用Scala编写的。因此为了更好的学习Spark, 需要掌握Scala这门语言。

Scala 是 Scalable Language 的简写,是一门多范式(范式/编程方式[面向对象/函数式编程])的编程语言

联邦理工学院洛桑(EPFL)的Martin Odersky于2001年开始设计Scala。

Spark的兴起,带动Scala语言的发展!

1、Scala语言诞生小故事
创始人马丁·奥德斯基(Martin Odersky)是编译器及编程的狂热爱好者,长时间的编程之后,希望发明一语言,能够让写程序这样的基础工作变得高效,简单。所以当接触到JAVA语言后,对JAVA这门便携式,运行在网络,且存在垃圾回收的语言产生了极大的兴趣,所以决定将函数式编程语言的特点融合到JAVA中,由此发明了两种语言(Pizza & Scala)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lt0wks7J-1644545808046)(assets/image-20200813211557363.png)] Pizza和Scala极大地推动了Java编程语言的发展。[如何理解?]

jdk5.0 的泛型,for循环增强, 自动类型转换等,都是从Pizza 引入的新特性。jdk8.0 的类型推断,Lambda表达式就是从scala引入的特性。 且现在主流JVM的javac编译器就是马丁·奥德斯基编写出来的。Jdk5.0 Jdk8.0的编译器就是马丁·奥德斯基写的,因此马丁·奥德斯基 一个人的战斗力抵得上一个Java开发团队。

2、Scala和 Java以及jvm的关系

一般来说,学Scala的人,都会Java,而Scala是基于Java的,因此我们需要将Scala和Java以及JVM之间
的关系搞清楚,否则学习Scala会蒙圈。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XU5tybWX-1644545808048)(assets/image-20200908215140336.png)]

.scala 源码// 1、能够继续使用java的语法(部分)System.out.Println("hello") [ok]HashMap hm = new HashMap() [不ok]//2、sacla特有语法(举例)val tuple = (1, 20, "hello", 23.9) //元组val map = Map(("no",10), ("no2", 40)) // map//3、增加功能,比如 函数式编程//(1) 偏函数// (2) 函数的柯里化// (3) 高阶函数。。。// (4) 将函数作为参数传递//4、从形式上看,是scala 的类,但是这个类是对java的类/接口进行包装,比如var arr = new Array[Int](10) // 表示我定义了一个数组,该数组存放Int, 10个元素

3、Scala 语言的特点

Scala 是一门以 java 虚拟机(JVM)为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言。

Scala 是一门多范式 (multi-paradigm) 的编程语言,Scala 支持面向对象和函数式编程。Scala 源代码(.scala)会被编译成 Java 字节码(.class),然后运行于 JVM 之上,并可以调用现有的Java 类库,实现两种语言的无缝对接。scala 单作为一门语言来看, 非常的简洁高效 (三元运算, ++ , --)Scala 在设计时,马丁·奥德斯基 是参考了 Java 的设计思想,可以说 Scala 是源于 java,同时马丁·奥德斯基 也加入了自己的思想,将函数式编程语言的特点融合到 JAVA 中, 因此,对于学习过Java 的同学,只要在学习 Scala 的过程中,搞清楚 Scala 和 java 相同点和不同点,就可以快速的掌握Scala 这门语言。、快速有效掌握 Scala 的三点建议 学习 scala 法 的特有的语法。区别 scala 和 Java 。如何规范使用 scala。
4、Windows下搭建Scala开发环境

具体的步骤

首先把 jdk1.8 安装下载对应的 scala 安装文件 scala-2.11.8.zip[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JVECB4KA-1644545808049)(assets/image-20200908220333097.png)]配置 scala 的环境变量[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BXxumlpP-1644545808050)(assets/image-20200908220614364.png)]测试一下, 输入 scala 的指令看看效果:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXy22Ocq-1644545808051)(assets/image-20200908220743202.png)]
5、Linux下搭建Scala开发环境

在实际开发中,我们的项目是部署到 linux,因此,我们需要在 Linux 下搭建 scala 的环境。具体的步骤如下:

下载对应的 scala 的安装软件scala-2.11.8.tgz

通过远程登录工具,将安装软件上传到对应的Linux 系统/opt/software目录下

tar -zxvf scala-2.11.8.tgz -C /opt/module 将安装文件解压,并且移动到
/opt/module下

配置环境变量 vim /etc/profile

export SCALA_HOME=/opt/module/scala-2.11.8export PATH=$PATH:$SCALA_HOME/bin

source /etc/profile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CtgcQLpF-1644545808053)(assets/image-20200908221918598.png)]

Scala的REPL
介绍

上面打开的 scala 命令行窗口,我们称之为 REPL,是指:Read->evaluation->Print->Loop,也称之为交互式解释器。 说明

在命令行窗口中输入 scala 指令代码时,解释器会读取指令代码®并计算对应的值(E),然后将结果打印出来§,接着循环等待用户输入指令(L)。从技术上讲,这里其实并不是一个解释器,而是指令代码被快速的编译成 Java 字节码并被 JVM 加载执行。最终将执行结果输出到命令行中。

6、Scala 开发工具的介绍

idea中Scala 插件安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zo7yK7on-1644545808054)(assets/image-20200908222646249.png)]

scala 的开发的快速入门

同Java开发一样先创建一个Maven工程。

默认下,maven 不支持 scala 的开发,需要引入 scala 框架:右键项目点击-> add framework support在下图选择 scala。、

创建项目的源文件目录:右键 main 目录->创建一个 diretory -> 写个名字(比如 scala)-> 右键 scala 目录->mark directory -> 选择 source root 即可。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vGwVJLrA-1644545808055)(assets/image-20200908223250465.png)]

开发一个 HelloScala.scala 的程序

package com.atguigu.chapter01object HelloScala { def main(args: Array[String]): Unit = { println("hello scala!") }}

7、Scala程序反编译-说明Scala程序的执行流程

下面我们说明一下 scala 程序的一执行流程:

object 在底层会生成两个类 HelloScala , HelloScala$HelloScala 中有个 main 函数,调用 Hello$ 类的一个静态对象 MODULES$
HelloScala

package com.atguigu.chapter01;import scala.reflect.ScalaSignature;@ScalaSignature(bytes="0601%:Q!0102t02%t!02S3mY>346-317b25t31A!A05dQ0604H/32:1c)21QAB01bCR

HelloScala$

package com.atguigu.chapter01;import scala.Predef.;public final class HelloScala${ public static final HelloScala$ MODULE$; static{ MODULE$ = new HelloScala$(); } // 可以理解我们在 main 中写的代码在放在 HelloScala$ 的main,在底层执行scala编译器做了一个包装 public void main(String[] args){ Predef..MODULE$.println("hello scala!"); } private HelloScala$() { MODULE$ = this; }}

8、Scala 程序开发注意事项(重点)
Scala 源文件以 “.scala" 为扩展名。Scala 程序的执行入口是 main()函数。Scala 语言严格区分大小写。Scala 方法由一条条语句构成,每个语句后不需要分号(Scala 语言会在每行后自动加分号),这也体现出Scala 的简洁性。如果在同一行有多条语句,除了最后一条语句不需要分号,其它语句需要分号。
9、Scala语言输出的三种方式
字符串通过+号连接(类似 java)。printf 用法 (类似 C 语言)字符串通过 % 传值。字符串通过$引用(类似 PHP)。

object TestPrint { def main(args: Array[String]): Unit = { var name : String = "mm" var age : Double = 18 // 使用 + println("hello" + age + name ) // 使用格式化的方式 printf printf("name=%s day=%fn", name, age) //使用$引用的方式,输出变量,类似 php println(s"第三种方式 name=$name age = ${age + 1}") }}

10、Scala 源码的查看的关联

在使用 scala 过程中,为了搞清楚 scala 底层的机制,需要查看源码,下面看看如果关联和查看 Scala的源码包。查看源码, 选择要查看的方法或者类, 输入 ctrl + b

将我们的源码包拷贝到 scala/lib 文件夹下scala-sources-2.12.4关联即可,选中这个文件夹,进行关联, 最后,可以看到源码。
11、注释

用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性;

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

Scala中的类型注释(同Java):

单行注释多行注释文档注释

对一下代码使用scaladoc生成说明文档:

package com.atguigu.chapter01object HelloScala { def main(args: Array[String]): Unit = { println("hello scala!") } def sum(a: Int, b: Int): Int = { return a + b }}

使用以下命令

scaladoc -d E:/file/scala HelloScala.scala

结果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bCECzYtB-1644545808056)(assets/image-20210321160737568.png)]

12、Scala编码风格 正确的缩进和空白(同Java) 使用一次 tab操作,实现缩进,默认整体向右边移动,时候用shift+tab整体向左移或者使用ctrl + alt +L来进行格式化运算符两边习惯性各加一个空格。比如:2 + 4 * 5。一行最长不超过80个字符,超过的请使用换行展示,尽量保持格式优雅 Scala官方编程指南

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aY0Zu5oi-1644545808057)(assets/image-20210321163036676.png)]

13、本章小结

Scala程序的编写、编译、运行步骤是什么?

编写:就是使用工具,开发scala程序编译:就是使用scalac命令将.scala文件编译成.class运行:就是使用scala来将.class文件加载到jvm并运行

能否一步执行?

可以直接运行.scala,但是速度慢.cmd ----> scala xx.scala ☆

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。