【scala函数式编程】函数式编程入门

开始之前

不建议新人学习scala函数式编程,学习scala函数式编程,需要起码的Java知识,因为很多scala特性编译后会转化成java代码,拥有扎实的Java基础可以极大的平滑学习曲线,提升学习体验。
如果对Scala有浓厚的兴趣,也可以从scala命令行尝试各种代码示例,本教程的代码注释会提供很多内容帮助理解,本文不涉及环境配置的初级内容,敬请谅解
(最初学习scala函数式编程这本天书的时候我也骂了作者很多次= =)。

1. 函数式编程

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。
和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。
和过程化编程相比,函数式编程里函数的计算可随时调用。

2. 副作用

a. 读取输入:readLine
b. 等待输入:readLine
c. 修改变量:var a = List(1); val a = a :+ 1
d. 打印输出:println()
e. 抛出异常:throw new Exception(“test”)
f. 读写文件:val test = scala.io.Source.fromFile(“/Users/lijp/test.txt”).getLines
g. 直接修改数据结构:val a = List(1, 2, 3); val a = a.zipWithIndex
h. 设置对象成员:略
i. 在屏幕绘图:略

3. 引用透明

引用透明:如果表达式e满足引用透明,那么e可以替换为e的运算结果,且不改变原程序的含义,换言之,引用透明一定不能修改原始数据或产生副作用。

4. 纯函数

纯函数:若表达式f(x)引用透明、且x引用透明,那么f是一个纯函数。

5. 引用透明、纯函数举例说明

// 1. 引用透明的例子
val x = "hello world"
var r1 = x.reverse
var r2 = x.reverse
// 使用x替换r1、r2中的x
val r1 = "hello world".reverse
val r2 = "hello world".reverse
// r1、r2结果保持不变,说明x引用透明

// 2. 引用不透明的例子
val x = new StringBuilder("hello world")
val y = x.append("world") // 这里的append方法有副作用,修改了原来的x
val r1 = y.toString
var r2 = y.toString
// 使用y替换r1、r2中的y,r2结果改变,相当于append执行了两次
val r1 = x.append("world").toString
val r2 = x.append("world").toString
// 说明y引用不透明,不是纯函数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼摆摆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值