您的位置:首页 > 编程语言

Scala学习笔记一Scala与函数式编程

2018-12-02 00:11 87 查看

**

摘要:

**
去年开发的过程中使用过Kafka,了解到Kafka是用Scala编写的,今年在开发过程中,使用了spark,spark也是使用Scala编写的,并且在项目中使用了Scala开发,只是对Scala缺乏一个系统的学习,所以花了一个多月的时间看完了《快学Scala》,看完之后本来想写点摘要笔记,过程当中顺带看了慕课网Scala程序设计—基础篇,发现慕课网的基础讲解挺不错的,所以就把慕课网的讲解结合了个人的理解记录下来,慕课网的基础篇确实讲解的是基础,建议大家看抽空看一下《快学Scala》,书本把原理的东西,以及Scala的很多概念讲解得更加详细

**

一.什么是Scala

**
来自scalable可伸缩的,可伸缩编程语言,纯正的面向对象语言,函数式编程语言,无缝的Java互操作语言,
Scala之父 Martin Odersky

**

二.函数式变成是什么鬼?

**
只用纯函数来编写程序
纯函数(pure function) ,或函数的纯粹性(purity),没有副作用(Side Effect)
副作用是状态的变化(mutation)
例子:修改全局变量,抛出异常,IO读写,调用有副作用的函数
副作用:
var x=1
def function1(y:Int) = x+y
def function2(y:Int) = {x+=y;x}
这里全局变量x在function1调用后不改变数值,function2中调用后改变数值,所以说function1对x没有副作用,function2有副作用。
引用透明(Referential Transparency)对于相同的输入,总是得到相同输出, 如果f(x)的参数x和函数体都是引用透明的,那么函数f是纯函数
例子:违反引用透明
var x=new StringBuilder(“Hello”)

x:StringBuilder=Hello
var y=x.append(" World!")
y:Stringbuilder= Hello World!
var z=x.append(“World!”)
z:StringBuilder = Hello World!World!
函数体append返回的值不同,违反引用透明
怎么确保引用透明:不变性(Immutability) 为了获得引用透明性,任何值都不能变化

函数式编程重要概念:

函数是一等公民(First-class Function)
一切都是计算,函数式编程中只有表达式,变量、函数都是表达式
高阶函数(Higher order Function)
闭包(Closure)
表达式求值策略:严格求值 和非严格求值 Call By Value vs Call By Name
惰性求值(Lazy Evaluation) 递归函数(Recursive Function) 递归实现循环
尾递归(Tail Recursion)

函数式编程优点:

生产效率高,同样的程序,Lisp代码的长度可能是C代码的1/7 到1/10
易于推理(Reasoning)
并行编程 多核计算、云计算
函数式编程的崛起:
摩尔定律的失效 多核处理器 云计算时代

**

三.scala环境搭建 省略,,,网上教程多,搭建简单

**
涉及概念: jdk 安装 ,Scala 安装 ,命令行通过输入scala启动Scala,
Scala ide安装,Scala ide 创建Scala代码 ,Scala编译Scala文件,
SBT Simple Build Tool Scala编译工具通过sbt console启动Scala,
REPL Read Evaluate Print Loop交互式程序运行环境,

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: