第十二课:Scala函数式编程进阶

看到RDD

 

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

其实这里传递的参数是函数,函数名称是f,参数是T,返回类型是U

我们可以看到到处都是函数!!!

 

 

package com.dt.spark.scala.basics

 

object FunctionalPrograming {

 

  def main(args: Array[String]) {

    /**

     * 1.函数和变量一样,是Scala的一等公民,函数可以直接赋值给变量

     */

    val hiData = hiBigData _

    hiData("hehe")

    /**

     * 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入的参数类型和返回值类型,

     * 不需要名称,一般都会把匿名函数赋值给一个变量(其实是val常量),Spark的源码中存在

     * 大量这种语法!!!

     */

    val f = (name: String) => println("hi," + name)

    f("haha")

   

    /**

     * 3.函数可以作为参数直接传递给函数,这极大地简化了编程的语法,为什么这样说呢?

     * 原因非常简单:

     * 1.以前Java的方式是new一个接口的实例,并且在接口实例的回调方法中来实现业务逻辑

     *现在是直接把回调方法传递给函数,且在函数体中直接使用,这毫无疑问地简化了代码的编写

     * 2.这种方式非常方便编写复杂的业务逻辑和控制逻辑,对于机器学习,深度学习,图计算等等而言,至关重要

     *

     * 函数作为函数的参数传递的编程方式称之为高阶函数,Spark中的源码有60%都是这种代码!!!

     */

    def getName(func:(String,Int) => Unit,name:String,age:Int){

      func(name,age)

    }

   

    getName((name:String,age:Int) => println(name+":"+age),"xixi",5)

   

    val mulArr=Array(1 to 10 : _*).map(item => item*2)

    mulArr.foreach(x => println(x))

   

    /**

     * 4.函数式编程一个非常强大的地方在于函数的返回值可以是函数,

     * 当函数的返回类型是函数的时候,这时候就表明Scala函数实现了闭包

     * 闭包的内幕是:Scala的函数背后是类和对象,所以Scala的参数都作为了对象的成员!!!

     * 所以后续可以继续访问,这就是实现原理的内幕

     */

    def funcResult(message:String) = (name: String) => println(message + name)

   

     /**

     * 5.currying函数写法,只要是复杂的Scala的函数式编程,一定会使用这种写法!!!

     * 可以维护变量在内存中的状态,从而实现返回函数的链式功能,可以实现非常复杂的算法和逻辑

     */

   

    // def funcResult(message:String,name:String) => println(message + name)

   

    funcResult("hi,")("Java")

    val result=funcResult("hi,")

    result("Java")

   

   

  }

 

  def hiBigData(name: String) {

    println("hi," + name)

  }

 

}

 

归纳总结:看笔记和理解其中的原理

 

转载于:https://my.oschina.net/u/1449867/blog/726150

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值