8.函数式编程

来源:互联网 发布:java 数据字典 编辑:程序博客网 时间:2024/06/07 01:56

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)  }}






0 0
原创粉丝点击