函数式编程

来个链接 [ 函数式编程 ]

在函数式编程里面,方法是方法,函数是函数,两者不同。

函数可以作为参数传递给方法 .

package com.msym

/**
  * Created by msym on 2017/7/4.
  * 函数式编程
  */
object Demo {
  def main(args: Array[String]): Unit = {
    val res1 = m1(fun1, 10, 20)
    println(res1)
    val res2 = m1(fun2, 10, 20)
    println(res2)

  }
  //定义一个方法,接收三个参数:一个函数(仅仅是函数的签名),另外两个是Int类型(函数运行需要的参数)
  def m1(fun : (Int,Int) => Int, x:Int, y:Int) = {
    //调用函数
    fun(x, y)
  }
  //定义一个函数fun1
  val fun1 = (x:Int, y:Int) => x + y
  //定义另个函数fun2
  val fun2 =(x:Int, y:Int) => x * y

  val fun3 = (x:Int) => x
}

 

函数式编程理解例子之一 :

函数代替了 Java 中的匿名类,

scala 中 Array 类的 map()方法, 接收一个函数, 用于对数组内容进行操作 :

package com.msym

/**
  * Created by msym on 2017/7/4.
  * http://www.cnblogs.com/daimajun/
  */
object Demo {
  def main(args: Array[String]): Unit = {
    val arr = Array("aaa", "bbb")
    //原数组
    for (x <- arr)
      println(x)
    //这里的toUpperCase可以加括号, 也可以不加
    val newArr = arr.map(x => x.toUpperCase())
    //新数组
    for (x <- newArr)
      println(x)
  }
}

    打印出:

image

对于上面的代码, 有一种更变态的方式, map()方法中传递的函数有所不同, 如下:

val newArr = arr.map(_.toUpperCase)

这里的下划线 "_" 代表的是每次数组中取出的元素, 然后将其转为大写.

posted @ 2017-07-05 22:55  码上猿梦  阅读(184)  评论(0编辑  收藏  举报