Scala学习之一函数式编程进阶

来源参考王家林老师讲解


 1.函数式编程进阶:

 1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量
 2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,
 但是如果你要调用这个函数的话,一般会把这个匿名函数赋值给一个变量,其实是val,
 3.所以函数可以作为参数传递给函数,这个极大地简化了编程的语法,为什么这样说呢?原因非常简单
  第一:以前Java方式是new 出一个接口实例,并且在接口实例的回调方法中,来实现业务逻辑,
  现在是直接回调方法,callback,传递给我的函数,且函数体直接使用,
  第二:方便编写业务逻辑,对于图计算和机器学习,深度学习至关重要
 
  函数作为函数的参数传递的编程方式是称之为高级编程
  4.函数式编程一个非常强大的地方之一是返回值可以是函数:当函数的返回类型是函数的时候,这个时候就表明Scala的函数实现了闭包
  Scala闭包的内幕:Scala的背后是类和对象,所以Scala的参数都作为了对象的成员!!!,所以可以继续访问

 5.Currying(柯里化) ,复杂的函数式经常使用,可以维护内存中的状态,并且返回函数的链式功能,可以实现非常复杂算法和逻辑

2.代码

2.1函数直接赋值给变量

1.函数和变量一样作为Scala语言的一等公民,函数可以直接赋值给变量
object test {
  def main(args: Array[String]): Unit = {
    val per=pp _
    per("free")
  }
  def pp(name:String){
    println(name)
  }
}
输出结果:free

2.2匿名函数

object test {
  def main(args: Array[String]): Unit = {
    //2.函数更常用的方式是匿名函数,定义的时候只需要说明输入参数的类型和函数体即可,不需要名称,
   // 但是如果你要调用这个函数的话,一般会把这个匿名函数赋值给一个变量,其实是val,
   val f=(name:String)=>println(name)
   f("free1")
  }
  
}

输出结果:free1

2.3函数作为参数


object test {
  def main(args: Array[String]): Unit = {
    /*
     * 3.所以函数可以作为参数传递给函数,这个极大地简化了编程的语法,为什么这样说呢?原因非常简单
 						* 第一:以前Java方式是new 出一个接口实例,并且在接口实例的回调方法中,来实现业务逻辑,
	 					* 	现在是直接回调方法,callback,传递给我的函数,且函数体直接使用,
 						* 第二:方便编写业务逻辑,对于图计算和机器学习,深度学习至关重要
 						* 		
 						* 函数作为函数的参数传递的编程方式是称之为高级编程
     */
    val f=(name:String) =>println(name)
    def getName(func:(String)=>Unit ,name:String){
      func(name)
    }
      getName(f,"Scala")
  }
  
}

输出结果:Scala

2.4函数的返回值是函数
4.函数式编程一个非常强大的地方之一是返回值可以是函数:当函数的返回类型是函数的时候,这个时候就表明Scala的函数实现了闭包
 		* Scala闭包的内幕:Scala的背后是类和对象,所以Scala的参数都作为了对象的成员!!!,所以可以继续访问
 		*/
    
   def funcresult(message:String)= (name:String) =>println(message+" "+name)
  // funcresult("java")("dayu")   //这种方式Currying函数写法  
   val res=funcresult("java")//这个语句和下面一条等价于上面的一个语句
   res("dayu")


你可能感兴趣的:(Scala)