8.函数式编程

xiaoxiao2021-02-28  97

1.函数说明:

def map[U : ClassTag](f : T => U)  : RDD[U] = withScope{

1.1 其中f 表示函数名称;T表示输入参数;U表示返回值类型

1.2 map是一个函数,其参数为(f : T => U)函数,只不过,函数名为f, 函数类型为 T => U

2.函数要点概述:

2.1 函数可以直接赋值给变量

2.2 函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你需要使用的话,一般会把这个匿名函数赋值给一个变量(其实是val常量)

2.3 所以函数可以作为参数直接传递函数(其实现有点类似c语言中指向函数的指针),所带来的好处如下:

a )  在使用java的时候我们可以利用多态,首先new出一个接口的实例回调方法来实现业务逻辑,现在直接把回调方法传递给我们的函数,且在函数体中直接使用,这

      毫无疑问的简化了代码编写,提升了开发效率

b) 这种方式非常方便编写复杂的业务逻辑和控制逻辑;

2.4 闭包的概念:函数的返回值也可以是函数;当函数的返回类型是函数的时候,这个时候就表明Scala的函数实现了闭包;Scala是完全面向对象的语言,所以可以理解函        数本身也是一个对象,scala的参数也是对象成员,所以后续可以继续访问,这就是Scala实现闭包的原理

2.5 Currying : 柯里化函数也是函数式编程的一个重要内容,下面将会为你展示柯里化函数的具体应用实例:

object functionInScala { def main(args: Array[String]): Unit = { //1.将方法转换成函数 val helloworld = hello _ helloworld("robin") //2.匿名函数的使用 val f = (name:String) => println("Hi," + name) f("I am robin") //3.函数作为参数传递给函数实例;第一个参数是函数,第二个参数是名字 def getName(func:(String) => Unit,name:String) { func(name) } getName(f,"argument") //打印结果:Hi,argument //4. 这里1 to 10作为可变参数传入 val multipeArray = Array(1 to 10:_*).map{(item:Int) => 2 * item}.foreach(x => println(x)) //5.返回值是函数 ==> 闭包 def closure(message:String) = (name:String) => println(message + ":" + name) /** * 执行流程:returnFunc("Hello") 返回 (name:String) => println("Hello" + ":" + name) * ("World")又将参数传递给(name:String) => println("Hello" + ":" + name) * 即等同于: * val result = returnFunc("Hello") * result("World") */ closure("Hello")("World") //Currying 柯里化函数 } def hello(name : String): Unit = { println("hello " + name) } }

转载请注明原文地址: https://www.6miu.com/read-20831.html

最新回复(0)