Scala函数式编程进阶

来源:互联网 发布:成都数据恢复价格表 编辑:程序博客网 时间:2024/04/30 06:18


/**
 * 函数式编程进阶
 * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
 * 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
 *   匿名函数赋值给一个变量(其实是val常量)
 * 3,函数可以作为参数传递给函数,这极大简化了编程方法,
 *   第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
 *      函数,且在函数体中直接使用,提高了开发效率
 *   第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
 *   
 *   函数作为函数的参数传递的编程方式称之为高阶函数的编程方式,Spark源码和应用程序开发中至少60%都是这种代码,必须务必一定要掌握
 *
 */
object HelloFunctionalProgramming2 {
  def main(args: Array[String]): Unit = {
    /**
    * 函数式编程进阶
    * 1,函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量;
    *
    */
    val hiData = hiBigData _
    hiData("Spark")
   
    /**
       * 函数式编程进阶
       * 2,函数更长用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,但是如果你要使用的话,一般会把这个
       *   匿名函数赋值给一个变量(其实是val常量)
       *
       */
    val f = (name : String ) => {
      println("Hi jianxie  111, "+name)
      println("Hi jianxie  222, "+name)
    }
    f("Kafka")
   
    /**
       * 函数式编程进阶
       * 3,函数可以作为参数传递给函数,这极大简化了编程方法,
       *   第一,以前java是new出一个接口实例,并且在接口实例的回调方法callback中来实现业务逻辑,现在是把回调方法callback传递给我的
       *      函数,且在函数体中直接使用,提高了开发效率
       *   第二,这种方式非常方便编写负责的业务逻辑和控制逻辑,对于图计算、机器学习、深度学习等而言至关重要
       *   
       */
   
    def getName(func : (String) => Unit ,name:String){
        func(name)
    }
    getName(f,"Docker")
   
  
    Array(1 to 10:  _* ).map{ (item: Int) =>2 * item  }.foreach{ x => println(x) }
   
    /**
     * Currying 函数写法,必须掌握这种写法,只要是复杂的Scala函数式编程代码就一定会使用这种写法
     *
     */
    def funcResult(message :String) = (name:String) => println(message + ":" + name)
    funcResult("Hello")("Java")
   
    val result = funcResult("Hello")
    result("Ruby")
   
  }
  def hiBigData(name:String){
    println("Hi "+ name)
  }
}
1 0