第3课:Scala函数式编程彻底精通及Spark源码阅读

本期内容:

  1. Scala 中函数式变成彻底详解
  2. Spark源码中的Scala函数式编程
  3. 案例和作业
def fun1(name:String){println(name)}

val fun1_v = fun1 _  //函数名+空格+_ 代表函数原型   可以赋值给变量
fun1_v: String => Unit = <function1>

fun1("Spark")
fun1_v("Spark")

匿名函数

val fun2 = (content: String) => println(content)
fun2("Scala")

高阶函数

函数的参数为函数
函数可赋值给变量,变量作为函数参数

val hiScala = (content : String) => println(content)
def bigData(func: String => Unit, content: String) {func(content)}

bigData(hiScala, "Spark")

val array = Array(1,2,3,4,5,6,7,8,9)
array.map(item => item*2)

高阶函数的返回值也可能是函数

def func_Returned(content: String) = (messege : String) => println(content+" "+messege)

val returned = func_Returned("Spark")
returned("Scala")
// Spark Scala

参数推断

将一个匿名函数传递给另外一个函数或方法是,Scala会尽量帮助你推断出类型信息
对于只有一个参数的函数,你可以省略掉外围的()
如果参数在=>右侧只出现过一次,就可以用下划线(_)代替,甚至可以不加参数,不写
第3课:Scala函数式编程彻底精通及Spark源码阅读_第1张图片

闭包

函数的变量超出其有效域时还能对函数内部的变量进行访问

第3课:Scala函数式编程彻底精通及Spark源码阅读_第2张图片

funcResult 仍可以访问scala的 content变量 “Spark”
生成了一个看不见的对象

柯里化 currying

将原来接受两个参数的函数变成新的接受一个参数的函数的过程。
新的函数返回一个以原有第二个参数作为参数的函数
第3课:Scala函数式编程彻底精通及Spark源码阅读_第3张图片

常用高阶函数

(1 to 100).reduceLeft(_+_)

从左向右累加

.map
.flatMap(_.split)
.zip

作业

统计一个文件夹下面所有文件中的单词出现的总次数

你可能感兴趣的:(第3课:Scala函数式编程彻底精通及Spark源码阅读)