前言
Scala 是 Scalable Language 的简写,是一门多范式的编程语言
联邦理工学院洛桑(EPFL)的Martin Odersky于2001年基于Funnel的工作开始设计Scala。
Funnel是把函数式编程思想和Petri网相结合的一种编程语言。Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
Scala特性:
面向对象特性:
Scala是一种纯面向对象的语言,每个值都是对象。每个方法都是调用。举例来说,如果你执行 1+2
,则对于 Scala 而言,实际是在调用 Int 类里定义的名为 +
的方法。
函数式编程:
Scala也是一种函数式语言,奇函数也能成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高级函数,并支持柯里化。Scala的case class及内置的模式匹配相当于函数式编程语言中常用的代数类型。
我们通过函数式编程来实现数组翻倍的例子
1 | val nums = Array(1,2,3,4) |
利用Array的map函数,将所有元素2,并生成了一个新的双倍数组。map函数所做的事情是把遍历整个数组的过程,归纳并抽离出来,让我们专注于描述我们想要的是什么”_*2*“。我们传入map的是一个纯函数;它不具有任何副作用(不会改变外部状态),它只是接收一个数字,返回*2后的值。
正如封装、继承\和多态\是面向对象编程的三大特性。函数式编程也有自己的语言特性数据不可变、函数是第一公民、引用透明和尾递归
数据不可变(immutable data):变量只赋值一次,如果想改变其值就创建一个新的。
函数是第一公民(first class method):函数可以像普通变量一样去使用。函数可以像变量一样被创建,修改,并当成变量一样传递,返回或是在函数中嵌套函数。
引用透明(referential transparency): 指的是函数的运行不依赖于外部变量或“状态”,只依赖于输入的参数,任何时候只要参数相同,调用函数所得到的返回值总是相同的。天然适应并发编程,因为调用函数的结果具有一致性,所以根本不需要加锁,也就不存在死锁的问题。
尾递归(tail call optimization):函数调用要压栈保存现场,递归层次过深的话,压栈过多会产生性能问题。所以引入尾递归优化,每次递归时都会重用栈,提升性能。
Scala安装
Windows 上安装Scala
Scala 语言可以运行在Window、Linux、Unix、 Mac OS X等系统上。
Scala是基于java之上,大量使用java的类库和变量,使用 Scala 之前必须先安装 Java(>1.5版本)。
这里就不介绍Java环境配置,如果还未安装可以参考相关的博客
接下来,我们从Scala官网
下载后,双击 msi 文件,一步步安装即可,安装过程你可以使用默认的安装目录。
安装好scala后,系统会自动提示,单击 finish,完成安装。
右击我的电脑,单击”属性”,进入如图所示页面。下面开始配置环境变量,右击【我的电脑】–【属性】–【高级系统设置】–【环境变量】,如图:
设置 SCALA_HOME 变量:单击新建,在变量名栏输入:SCALA_HOME: 变量值一栏输入:E:\02_software\scala-2.11.11 也就是 Scala 的安装目录,根据个人情况有所不同
设置 Path 变量:找到系统变量下的”Path”如图,单击编辑。在”变量值”一栏的最前面添加如下的路径: %SCALA_HOME%\bin;%SCALA_HOME%\jre\bin;
注意:后面的分号 ; 不要漏掉。
设置 Classpath 变量:找到找到系统变量下的”Classpath”如图,单击编辑,如没有,则单击”新建”:
- “变量名”:ClassPath
- “变量值”:.;%SCALA_HOME%\bin;%SCALA_HOME%\lib\dt.jar;%SCALA_HOME%\lib\tools.jar.;
注意:“变量值”最前面的 .; 不要漏掉。最后单击确定即可。
检查环境变量是否设置好了:调出”cmd”检查。单击 【开始】,在输入框中输入cmd,然后”回车”,输入 scala,然后回车,如环境变量设置ok,你应该能看到这些信息。