Scala中的函数式特征与并发.docxVIP

  • 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 } 嵌套函数 嵌套函数应用场景并不多,其中一个场景是将递归

文档评论(0)

1亿VIP精品文档

相关文档