scala介绍
- Scala语言来自于Scalable(可伸缩的)既可以写一些小的脚本,又可以写一写复杂的服务器端的程序。
- Scala是一门纯正的面向对象语言,具有OO特征。
- Scala是一门函数式语言,可以用函数式思想来编写代码
- Scala是构建于JVM之上的,与java可以无缝互操作。
函数式编程思想
函数式编程基本名词介绍
纯函数来编写程序。
- 纯函数(Pure Function),或函数的纯粹性(Purity)没有副作用(side Effect)
- 副作用是状态的变化
- 例子
- 修改全局变量
- 抛出异常
- IO读写
- 调用有副作用的函数
var x = 1
def XplusY_V1(y:Int) = x + y
def XplusY_V2(y:Int) = {x += y;x}
上面第一个函数是输入一个int类型的y,第二个函数是输入一个int类型的y返回值是x。
第二个函数相对于第一个函数对变量x产生了副作用。改变了x的值。
* 引用透明(Referential Transparency)对于相同的输入,总能得到相同的输出。
如果f(x)的参数x和函数体都是引用透明的,那么函数f是纯函数。
违反引用透明
- 不变性(Immutability)为了获得引用透明性,任何值都不能发生变化。
函数是一等公民(First-class Function)一切都是计算,函数式编程中只有表达式,变量、函数都是表达式。
函数也可以作为参数或者返回值。表达式求值策略:严格求值和非严格求职。
Call By Value属于严格求值
Call By Name属于非严格求职- 惰性求值(Lazy Evaluation)当定义这个变量时不会立即求值,只有在使用到这个变量时才会求值。
- 递归函数(Recursive Function)
在函数式编程中没有循环语句,所有的循环都要用递归来实现。
递归有个性能问题。容易堆栈溢出。
* 尾递归(Tail Recursion)
函数式编程的优点
- 生产效率高
同样的功能,Lisp(世界上第一个函数式编程语言)代码长度可能是C代码长度的七到十分之一。 - 易于推理
- 并行编程
因为是纯函数,所以不会引起线程紊乱。 - 多核计算、云计算
搭建scala环境
安装JDK
下载JDK最新版本,将环境变量添加到配置文件中
安装Scala的运行环境和包
从http://www.scala-lang.org/download上下载了Scala的最新版本,将环境变量添加到配置文件中就可以用了。
REPL(Read Evaluate Print Loop)就是scala命令行的运行环境。
在linux命令行输入scala就可以直接进入到scala REPL中。
devil@devilshome:~$ scala
Welcome to Scala 2.12.0-M4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_60).
Type in expressions for evaluation. Or try :help.
scala> println("Hello World")
Hello World
scala>
println()函数在所有Scala代码中都可用。
scala> val x =1
x: Int = 1
scala> var x = 1
x: Int = 1
scala>
var 和 val 的区别稍后解释。
使用eclipse开发scala
在http://scala-ide.org/download/sdk.html下载专为scala的eclipse
- new一个Scala Project
- new 一个Scala Worksheet
worksheet是可以在IDE中直接进行代码的运行和结果的获得,是交互式的。
默认直接生成一个Object
object worksheet {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
val x = 1 //> x : Int = 1
println(x)