理解Scala中的函数式编程

来源:互联网 发布:c语言char范围 编辑:程序博客网 时间:2024/06/05 00:57

核心内容: 
1、Scala中函数的地位:一等公民 
2、Scala中的匿名函数(函数字面量) 
3、Scala中的高阶函数 
4、Scala中的闭包 
5、Scala中的部分应用函数 
6、Scala中的柯里化函数


1、Scala中函数的地位:一等公民

①在Scala当中,函数是一等公民,像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量. 
②在Scala当中,函数是一等公民,函数的创建不用依赖于类、特质或者对象,而在Java当中,函数的创建则要依赖于类、抽象类或者接口.


示例程序1: 
这里写图片描述 
运行结果:

Spark   HadoopSpark   HadoopSpark   Hadoop
  • 1
  • 2
  • 3

示例程序2: 
这里写图片描述


2、Scala中的匿名函数(函数字面量)

①Scala中的匿名函数也叫做函数字面量,既可以作为函数的参数使用,也可以将其赋值给一个变量. 
②在匿名函数的定义当中,=>可理解为一个转换器,它使用右侧的算法,将左侧的输入数据转换为新的输出数据.


实例0 

val double = (i: Int) => i * 2  
//或者:val double :(Int)=> Int = _ * 2
List(1, 2, 3, 4, 5).map(double).foreach{j => print(j + " ")}


实例程序1: 

这里写图片描述 
运行结果:

[2  4   6   8][2  4   6   8][2  4   6   8]
  • 1
  • 2
  • 3
3、Scala中的高阶函数

①函数的类型,其实就是输入输出值的类型. 
②Scala中的高阶函数包括两种: 将一个函数作为参数的函数称为高阶函数 ;将一个返回值是函数的函数称为高阶函数.


实例程序1: 
这里写图片描述
运行结果:

HelloHelloHelloSpark   Hadoop
  • 1
  • 2
  • 3
  • 4
4、Scala中的闭包

①Scala中的闭包指的是当函数的变量超出它的有效作用域的时候,还能对函数内部的变量进行访问. 
②Scala中的闭包捕获到的是变量的本身而不仅仅是变量的数值,当自由变量发生变化时,Scala中的闭包能够捕获到这个变化. 
③如果自由变量在闭包内部发生变化,也会反映到函数外面定义的自由变量的数值.


示例程序1: 
这里写图片描述 
运行结果:

truetruefalse
  • 1
  • 2
  • 3

示例程序2: 
这里写图片描述 
运行结果:

3040
  • 1
  • 2

示例程序3: 
这里写图片描述 
示例程序4: 
这里写图片描述 
运行结果:

Hello   SparkHello   ScalaJava    Scala
  • 1
  • 2
  • 3
5、Scala中的部分应用函数

①部分应用函数只是在“已有函数”的基础上,提供部分默认参数,未提供默认参数的地方使用下划线替代,从而创建出一个“函数值”,在使用这个函数值(部分应用函数)的时候,只需提供下划线部分对应的参数即可. 
②部分应用函数本质上是一种值类型的表达式,在使用的时候不需要提供所有的参数,只需要提供部分参数.


实例程序1: 
这里写图片描述 
运行结果:

50405090
  • 1
  • 2
  • 3
  • 4
6、Scala中的柯里化函数

①scala中的柯里化指的是将原来接受两个参数的函数变成新的接受一个参数的函数的过程.新的函数返回一个以原有第二个参数作为参数的函数.


实例程序1: 
这里写图片描述 
运行结果:

30200
原创粉丝点击