Scala笔记整理(五):函数式编程

  (TOC)

  <人力资源/>   

作为值传递的函数

  

测试代码如下:

  cn.xpleaf.bigdata.p4.function
 <代码>包/* *
  * scala中关于函数的操作
  */对象_01FunctionOps {
  def主要(args:数组[String]):单位={
  functionOps1
  }/* *
  *作为值传递的函数
  *将一个函数作为值传递给另外一个函数变量的时候,约定需要在函数后面加上:空格和下划的线
  *相当于数据库中的别名,或者数据库表对应的视图
  */def functionOps1:单位={
  def sayHi(名称:字符串)=println(“你好,”+名字)
  
  def sayHello=sayHi _
  
  sayHello (“xpleaf”)
  }
  } 
  

输出结果如下:

  
 <代码>你好,xpleaf  
  

匿名函数

  

测试代码如下:

  cn.xpleaf.bigdata.p4.function
 <代码>包/* *
  * scala中关于函数的操作
  */对象_01FunctionOps {
  def主要(args:数组[String]):单位={
  functionOps2
  }/* *
  *匿名函数,说白了就是没有函数名字
  *匿名函数就和java中的匿名内部类一样,是只适合使用一次的函数
  *一般如果一个函数的参数是一个函数,这种情况下多用匿名函数来作为参数进行传递
  */def functionOps2:单位={
  val printName=(名称:字符串)=比;println(“你好,”+名字)
  printName (“xpleaf”)
  }
  
  } 
  

输出结果如下:

  
 <代码>你好,xpleaf  
  

其实前面在学习ArrayBuffer的时候已经有使用过匿名函数:

  
 <代码> scala>val ab=ArrayBuffer (Int)(3 8 2、20日5、7)
  阿瑟:scala.collection.mutable。ArrayBuffer (Int)=ArrayBuffer(3 8 2、20日5、7)
  scala>ab.sortWith ((v1、v2)=比;v1祝辞v2)
  res209: scala.collection.mutable。ArrayBuffer (Int)=ArrayBuffer(20、8、7、5、3、2)  
  

带函数参数的函数(高阶函数)

  

说明的作用有两个(匿名函数作为参数和返回值为匿名函数),具体参考下面的测试代码:

  cn.xpleaf.bigdata.p4.function
 <代码>包/* *
  * scala中关于函数的操作
  */对象_01FunctionOps {
  def主要(args:数组[String]):单位={//functionOps1//functionOps2
  functionOps3
  }/* *
  * scala的高阶函数,就是函数的(参数是函数)的函数,把这种函数称为高阶函数
  */def functionOps3:单位={//1 .匿名函数作为参数
  def highOrderFunc(名称:字符串,func:(字符串)=比;单位):单位={
  func(名字)
  }
  
  highOrderFunc (“xpleaf”(名称:字符串)=比;println(“你好,”+名字))//2 .将匿名函数作为返回值传递给另外一个函数
  def getGoodBayFunction (gMsg:字符串)=(gName:字符串)=比;println (gMsg +”、“+ gName)
  
  val goodbayFunction=getGoodBayFunction(“再见”)
  goodbayFunction (“xpleaf”)
  
  }
  } 
  

输出结果如下:

  
 <代码>你好,xpleaf
  再见,xpleaf  
  

参数(类型)推断

  

测试代码如下:

  cn.xpleaf.bigdata.p4.function
 <代码>包
  
  进口scala.collection.mutable.ArrayBuffer/* *
  * scala中关于函数的操作
  */对象_01FunctionOps {
  def主要(args:数组[String]):单位={//functionOps1//functionOps2//functionOps3
  functionOps4
  }/* *
  *对于匿名函数的省略写法
  */def functionOps4:单位={
  val ab=ArrayBuffer (Int) (1、2、3、4、5)//val newAB=ab.map ((x: Int)=比;x * 100)//val newAB=ab.map ((x)=比;x * 100)//val newAB=ab.map (x=比;x * 100)
  val newAB=ab.map (100 * _)
  println (newAB)//ArrayBuffer (100、200、300、400、500)
  
  }
  } 
  

输出结果如下:

  
 <代码> ArrayBuffer(100、200、300、400、500)  
  

常见高阶函数——地图函数

  
 <代码>遍历集合中的每一个元素,返回也是一个集合,集合大小和之前集合相等。 
  
      <李>快速产生0.1,0.2,0.3等方式的数字   
  
 <代码> scala>(1到9). map (0.1 * _) .foreach (println (_))
  0.1
  0.2
  0.30000000000000004
  0.4
  0.5
  0.6000000000000001
  0.7000000000000001
  0.8
  0.9  
  
      <李>打印三角形李   
  
 <代码> scala>(1到9). map (“*”* _) .foreach (println (_))
  *
  * *
  * * *
  * * * *
  * * * * *
  * * * * * *
  * * * * * * *
  * * * * * * * *
  * * * * * * * * *  
  
  

Scala笔记整理(五):函数式编程