2019-07-28

Scala 的发展历史

java 大概是在 92 年的时候出生的
scala 在 2003 年出生
2003 - 2013 年的时候,一直无人问津.

2013 年的时候,开始变火 ,spark 框架诞生了,这个带火了scala,因为这个框架的底层就是使用scala开发的
spark 可以使用 java 语言开发,也可以使用 Scala 语言开发等等

看完本文后的能力:

能力1: 熟练使用 Scala 开发 spark 程序.
能力1: 熟练使用 Scala 开发 spark 程序
能力2 : 使用 scala 开发一个简易的通信框架
能力2 : 使用 scala 开发一个简易的通信框架
能力3 : 阅读 spark 的源码
能力3 : 阅读 spark 的源码

1. scala 的基本介绍

为什么要学 Scala

1.优雅: 这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,APO 是否优雅灰直接影响到用户的体验

2.速度快: Scala 语言表达能力强,一行代码抵得上 Java 多行,开发速度快,Scala 是静态编译的,所以和 JRuby , Groovy 比起来速度会快很多.

3.能融合到 Hadoop 生态圈: Hadoop 现在是一个大数据的事实标准, Spark 并不是要取代 Hadoop ,而是要完善 Hadoop 生态圈, JVM 语言大部分可能会想到 Java ,但 Java 做出来的 API 太丑 ,或者想实现一个优雅的 API 太费劲了.

使用最多的版本是 2.11.
还有一个是2.10.x 版本也是比较多人用的,但是呢这个和上面那个不兼容的

scala 在数据处理上面,真的是非常的简洁,

2.scala 开发环境的安装

Windows 版本,建议去官网直接下载 zip 的安装包,直接解压后,.一定要注意的是,解压到一个没有中文没有空格的路径下面去.然后配置 SCALA_HOME 的环境变量就好了.这个本来没有的要新建.

关于:用户变量和系统变量,这两个都可以,只不过是其权限 不同罢了,有些公司会把用户变量或者系统变量的修改权限给你禁掉.

右击我的电脑,单击"属性",进入如图所示页面。下面开始配置环境变量,右击【我的电脑】--【属性】--【高级系统设置】--【环境变量】

2.1.HOME 的后面接上解压后的文件夹.

SCALA_HOME=D:\develop\scala-2.11.8
添加词条SCALA_HOME

2.2.配置Path : 就是刚刚添加的环境变量的名称的前面和后面都添加 % 号,然后在后面添加 \bin

%SCALA_HOME%\bin
配置环path
3. 到这里就配置完成了我们的win 的 scala ,在我们的黑窗口CMD中敲击命令 : scala 去检验是否安装成功.
检验是否配置成功了

3. Scala 开发工具安装

目前的 Scala 的开发工具主要有两种: Eclipse 和 IDEA ,.这两个开发工具都有相应的 Scala 插件, 如果使用 Eclipse ,直接到 Scala 官网进行下载对应的版本就很可以了.

http://scala-ide.org/download/sdk.html

由于IDEA 的 Scala 插件更加的优秀,大多数的 Scala 程序员都使用 IDEA 进行开发的,我们可以通过IDEA 进行在线安装,也可以到 IDEA 的插件网进行下载对应的版本插件进行离线安装,

http://www.jetbrains.com/idea/download/
第一步:进入设置

我们进入了 Plugins 之后,可以使用在线安装,下面展示的是IDEA 2017(这个版本目前最多人用)也可以使用离线安装,标红的位置就是使用我们本地安装,这个安装包就是我们刚刚去网站进行下载的包.当然也可以使用中间和左边的在线安装,更加的方便.


第二步: 2017版本的IDEA找到Plugin(本地插件)
这是2019IDEA 的安装

我们这里推荐使用离线进行安装,因为在线国外的原因网速多少挺慢甚至没有的.

到这里我们就已经在我们的工具中安装好了 Scala 开发工具了, 然后重启我们 IDEA
通过新建项目去检验是否安装成功.
4. Scala 的 REPL(ReadEvalPrint Loop/ 交互式解释器(其实按照单个的单词进行翻译更好一些)

R (Read /阅读), E(Evaluate / 评估) , P(Print / 打印输出) , L(Loop / 循环)
交互式解析器会读取输入内容,并对它进行求职,再返回结果,并重复此过程.(即所见即所得的编程)

说人话就是: Scala提供了Scala REPL,在我不确定一个算子的功能时,我可以很快打开REPL进行验证,并直观得到答案。

REPL 的特性:
变量会在会话周期内一直可用
多行代码和单行代码一起编译
支持链接外部的数据库和代码
REPL 历史命令会跨会话存储

我们直接在黑窗口CMD 输入 scala 就可以启动 Scala 并且进入到 REPL 中了
使用Scala 就直接进入到了我们的Scala REPL 中了
:help 查看我们可以使用到的常用命令,因为命令后面都带了解释就不一一解释了,简单的英文自己不懂得可以翻译哈!
使用:help 可以查看我们所有能够输入的命令
1.系统自动帮我们给了一个变量名
REPL 自动分配变量名: 如果我们在 REPL 当中没有定义变量名,那么我们的变量名系统会自动给定
注意: Scala 当中的变量类型可以不用指定,系统会自动推断,为了减少可变性引起的 bug, Scala 当中推荐尽量使用不可变类型来声明变量. Var 和 Val 申明变量的时候,变量都必须初始化.

在 Scala 中我们的输出打印只需要 ,相比java 的而言是简短很多很多的.

println()
2.我们可以直接去调用系统给的这个变量名获取里面的值

以上就是我们简单的 REPL 的 案例:就是所见即所得,这里可能还是很难理解,因为正常我们是不会再这个小黑窗口进行开发的,所以稍后我们将进入到 开发工具中去进一步的探索

4. 创建 支持 scala 的 maven工程代码开发

File ==> New ==> Project


第一步: idea中创建一个普通的maven 工程
第二步:新建maven 子模块
第三步:通常我们创建的是scala 的 Object对象

修改我们新建的Scala 文件夹属性
当然在子模块中可以也创建我们的scala 的 class 对象,也就是java的class
我们在新建Scala 的时候是有三种类型的

在这三个之中,首先我们的Scala 的里面是可以直接写Java 代码的,它是可以直接编译并且运行的.
Class 就是普通的java 对象.
在我们的java的类中可以写静态的和非静态的对象(变量/方法),他们的区别就是被 Static 静态修饰的,我们可以直接进行调用,不在需要先 new 一个类对象来进行调用.那么这样就是有时候,需要new ,有时候不用new ,静态和非静态的都混在了一起.

java中被static 修饰的是不用new对象就可以使用的

为了更好的进行分离我们的 Scala 把静态的给独立出来形成了 Object 对象了,我们的 Object 就是我们的java 中被 static 静态修饰的对象,也就是新建一个Object 之后,可以直接进行调用的.我们一般也是新建Object 对象.

注意:我们是要先把 scala 中的 scala maven jar 包依赖写好了,才可以在我们maven 的 new 的时候, 才有 Create New Scala Class .如果不导入依赖,那么就没有这个选项的,它只有新建 Java 对象.

day01子模块中的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>Scala</artifactId>
        <groupId>asjdfas</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <groupId>asjdfas</groupId>
    <artifactId>Scala</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module></module>
    </modules>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
            <!-- 如果想要用java -jar 来运行我们打包之后的jar包,则下面这个配置必须注释掉 -->
            <!-- <scope>provided</scope>-->
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- 限制jdk版本插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <!-- 编译scala需要用到的插件 -->
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <!-- 项目打包用到的插件 -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>cn.itcast.scala.demo1.ScalaFirst</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

4.1
编写一个简单的scala代码输出print

通常我们写完的代码都是部署到服务器上面进行运行的,我们要打包,上传到服务器然后运行的.将我们的代码打包,之后,进行运行 双击 package 之后,就会出现我们打好的 jar 包,然后有依赖的那个包就可以用了.
运行我们的代码一共可以有四个命令,两种是打包的时候选择了我们的 main 程序类的,两 种是我们打包时候没有选择 main 程序类的 其中第一种和第三种,都是选定了我们的 main 程序类 第二种和第四种都是没有选定我们的 main 程序类 四种运行方式都可以用于运行我们的 jar 包

第一种运行方式:我们打包的时候指定了对应的 main 方法所在的程序类 
scala scaladay01-1.0-SNAPSHOT-jar-with-dependencies.jar 
第二种运行方式:不管打包的时候有没有指定 main 方法所在的程序类,都可以运行 
scala -cp scaladay01-1.0-SNAPSHOT-jar-with-dependencies.jar cn.coyi.scala.demo1.ScalaFirst 
第三种方式:我们打包的时候指定了对应的 main 方法所在的程序类 
java -jar scaladay01-1.0-SNAPSHOT-jar-with-dependencies.jar
第四种方式:不管打包的时候有没有指定 main 方法所在的程序类,都可以运行 
java -cp scaladay01-1.0-SNAPSHOT-jar-with-dependencies.jar cn.coyi.scala.demo1.ScalaFirst 
我们可以看到我们的scala代码最终也编译成了class文件

5. Scala 基础入门

新建Scala Worksheet
5.1 声明变量的基本语法
1
var/val声明变量的基本语法
2
scala自动类型和块表达式的类型
3
算数运算符
4
image.png
5
while 循环的使用
6
while 循环的跳出
7
for 循环
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容