- 5
- 0
- 约6.1千字
- 约 68页
- 2019-01-03 发布于广东
- 举报
Scala中的函数式特征
ADC 2013
关于我
?? 王宏江,花名:宏江
?? 经历:
–? Java : 10y+
–? Scala : 2y+
–? 十年工作经验,2009年加入阿里,曾在阿里巴巴中文站和担任架构师,现在中间件稳定
性平台部门
–? Scala布道者
–? 业余马拉松爱好者
说明
?? 内容
Scala中的函数式的特征
Scala类型系统中的函数式特征
?? 交流:h1ps:///CSUG/csug/
?? 旺旺群:
Scala交流和答疑:sugsug
函数式语言
纯函数式语言 非纯函数式语言
Haskell Miranda Clean
静态类型
动态类型
ML OCaml Scala F# Lisp Scheme Erlang
关于Scala语言
面向对象与函数式被看成一个硬币的两面,Scala试图将这两 面融合起来
怎么理解这两种风格?
命令式与函数式
在《程序设计语言—实践之路》一书中
将“面向对象”与“面向过程”都归类为“命令式”语
言
命令式与函数式
命令式与函数式
?? 图灵机/冯诺依曼体系
–? 其运算可看做:
–? 通过修改内存来反映运算的结果。
–? (用命令修改状态)
?? Lambda演算(λ calculus)形式
–? 连续运算(基于函数)得到结果
?? 函数式程序是跟值打交道的,而不是跟状态打交道的。它们的工具是表达式,而不是命令。
—《ML for the Working Programmer》
vs 状态
副作用(side e?ect)
Scala的做法
?? 同时支持val和var体现了scala的“平衡”也可
以说是“圆滑”
?? 鼓励使用val,但并不排斥var;实际编码中val占大多数。
函数式是面向表达式的
Scala中的表达式
?? 1) 所有的表达式都有值
?? 2) 除了赋值和函数调用表达式,内置的几个表达式只有:if,while,for,try,match
?? 3) 块表达式{…}是基本表达式的组合,它的值是最后一个表达式的值。
Scala中的表达式
?? 一些表达式的值:
a=1;
while(a100){print(a)}
if(a2) 1;
?? 赋值表达式、while表达式的值是Unit类型,它的值是唯一的: ()
?? if表达式缺乏else的话,不符合条件则返回Unit类型的();即上面相当于:if(a2) 1 else ()
赋值语句的注意点:
不同于java:
1)while( (line = readLine() ) != null )
不起作用,前边的 line = readLine() 得到的是Unit类型值
2)x=y=1; // y=1; x=()
y=1表达式的结果是(),x被赋予了Unit类型的值
表达式主要是由函数调用组成的
Funcfon vs Method
Scala中的Funcfon/Method/Functor
狭义地区分(从可传递性上):
方法(method): 指的是在trait/class/object中以def关键字声明的,它不能被直接传递。
函数(funcfon): 类型为ParamsType=ResultType的变量,这些变量背后是用FuncfonN对象来封装的;可以被传递。方法可以转换为函数。
广义上,抛开背后的实现,方法就是函数;编译器某些场景自动把方法封装为一个函数对象来传递。Scala社区并不特别区分这两个名词,注意语境,有时候函数就是指方法,有时候则是指函数对象
函数作为一等公民
函数作为一等公民体现在哪儿?
1)? 可传递/赋值
2)? 嵌套函数和匿名函数
3)? 高阶
4)? 偏应用(parfal applicafon)
5)? 闭包
参考: h1p:///wiki/First--‐class_funcfon
可传递
scala def hf(f: ()=String) = println(f)
hf: (f: () = String)Unit
scala hf(()=“hi”) // 传递一个匿名函数 hi
scala def foo() = ok
foo: ()String
scala hf(foo) // eta--‐conversion: ()=foo()
ok
可传递
scala val fun = (x:Int) = print(x)
fun: Int = Unit = funcfon1
scala fun(2)
2
嵌套函数
scala def foo () {
| def bar() {
println(hi)
}
bar
}
嵌套函数
嵌套函数应用场景并不多,其中一个场景是将递归
您可能关注的文档
最近下载
- YY9706.102-2021医疗装备电磁兼容EMC测试项目汇总.docx VIP
- 微生物学基础第二版1-9单元教材配套课件完整版电子教案.pptx
- 2025-2026学年冀人版(2017)小学科学五年级下册教学计划及进度表.pdf VIP
- 无人机维修知识培训课件.pptx
- 2026中国矿产资源集团校园招聘和所属单位社会招聘笔试模拟试题及答案解析.docx VIP
- 党员干部个人组织生活会个人对照(学习贯彻党的创新理论方面;加强党性锤炼方面;联系服务职工群众方面;发挥先锋模范作用方面;改作风树新风等方面)存在的问题清单及整改措施.docx VIP
- 2026年陕西省中考道德与法治备考全指南 (知识点归纳,必考知识点、真题模拟试卷及解析).docx VIP
- 陕西省轨道交通预应力混凝土预制梁施工及验收标准.docx VIP
- 普洱市罗非鱼养殖综合技术规范.doc
- 中国矿产资源集团2026校园招聘和所属单位社会招聘参考笔试试题及答案解析.docx VIP
原创力文档

文档评论(0)