十一、scala函数式编程

一、将函数赋值给变量java

二、匿名函数闭包

三、高阶函数

四、高阶函数的类型推断

五、Scala的经常使用高级函数函数

六、闭包spa

七、SAM转换3d

八、Currying函数对象

九、returnblog

一、将函数赋值给变量

  Scala的函数是一等公民,能够独立定义,独立存在,并且能够直接将函数做为值赋值给变量。排序

  Scala语法规定,将函数赋值给变量时,必须在函数后面加上空格和下划线。接口

  

二、匿名函数

  Scala中,函数能够不须要命名,此时函数被称为匿名函数。作用域

  能够直接定义函数后,将函数赋值给某个变量,也能够将直接定义的匿名函数传入其余函数之中。

  Scala匿名函数的语法规则是 (参数名:参数类型)=>函数体

  

三、高阶函数

  Scala中,能够直接将某个函数传入其余函数,做为参数。这个功能很是强大,java不具有这样的特性。接收其余函数做为参数的函数,也被称为高阶函数(higher-order function)。

  

  高阶函数的另一个功能是将函数做为返回值。

  

四、高阶函数的类型推断

  高阶函数能够自动推断出参数类型,不须要写明类型;并且对于只有一个参数的函数,还能够省去其小括号。若是仅有的一个参数在右侧的函数体内只使用一次,则还能够省略接受参数,而且将参数用_来替代。

  

五、Scala的经常使用高级函数

  map:对传入的每一个元素进行映射,返回一个处理后的元素

  foreach:对传入的每一个元素都进行处理,可是没有返回值

  filter:对传入的每一个元素都进行条件判断,若是对元素返回true,则保留该元素,不然过滤掉该元素。

  reduceLeft:从左侧元素开始,进行reduce操做,即先对元素1和2进行处理,而后将结果和元素3 处理,再将结果与元素4处理,依次类推,即为reduce。

  sortWith:对元素进行两两相比,进行排序

  

六、闭包

  闭包最简洁的解释:函数在变量不处于其有效做用域时,还可以对变量进行访问,即为闭包。

  

  两次调用getGreetingFunc函数,传入不一样的msg,并建立不一样的函数返回。

  然而,msg只是一个局部变量,却在getGreetingFunc执行完以后,还能够继续存在建立的函数中,greetingFuncHello(“LiLei”)调用时,值为hello的msg被保留在了函数体内部,能够反复的使用。这种变量超出了其做用域,还可使用的状况,即为闭包。

  Scala经过为每一个函数建立对象来实现闭包,实际上对于getGreetingFunc函数建立的函数,msg做为函数对象的变量存在的,所以每一个函数才能够拥有不一样的msg。

七、SAM转换

  Java中,不支持直接将函数传入一个方法做为参数,一般来讲,惟一的办法就是定义一个实现了某个接口的类的实例对象,该对象只有一个方法;而这些接口都只有单个的抽象方法,也就是single abstract method,简称SAM。

  因为Scala能够调用Java代码的,所以当咱们调用java的某个方法时,就不得不建立SAM传递给方法,很是麻烦;可是Scala又是支持直接传递函数的。此时就可使用Scala提供的,在调用java方法时,使用的功能,SAM转换,即将SAM转换为Scala函数。

  要使用SAM转换,须要使用Scala提供的特性,隐式转换。

   

八、Currying函数

  Curring函数,是指将原来接受两个参数的一个函数,转换为两个函数,第一个函数接受原来的第一个参数,而后返回接受原来第二个参数的第二个函数。

  

九、return

  Scala中,不须要使用return来返回函数的值,函数最后一行语句的值就是函数的返回值。

  return用于在匿名函数中返回值给包含匿名函数的带名函数,并做为带名函数的返回值。

  使用return的匿名函数,是必须给出返回类型的,不然没法经过编译。

  

相关文章
相关标签/搜索