scala 函数式编程

/**
 * Created by corleone on 2016/1/3.
 */
object new_in_3 extends App {

  //写法一,始终待返回值
  def add(x: Int, y: Int): Int = {
    x + y
  }

  def returnUnit(): Unit = {
    println("这里的Unit我更愿意理解为返回的是一个执行过程,与void还是有一些区别的")
  }

  //写法二,省略非Unit返回值;如果没有写返回值,则根据等号后面的东西进行类型推演
  def test(x: Int) = {
    x
  }

  //写法三,省略等号,返回Unit
  def returnVoid() {
    println("return void")
  }

  //写法四:省略花括号,如果函数仅包含一条语句,那么连花括号都可以选择不写
  def max2(x: Int, y: Int) = if (x > y) x else y

  def greet() = println("Hello, world!")

  // 连参数括号都可以省略
  def greet2 = println("Hello, world!")

  // 函数也可以赋值
  // 无参函数赋值给另一个变量
  val greet3 = greet2

  // 无参函数赋值给另一个变量,后面需加 _ ,可以理解为确定是要将函数赋值给变量,而不是手误
  //  val max3 = max2 // 编译不通过
  val max4 = max2 _

  println(add(1, 2))
  println(test(1))

  // currying 柯里化
  // 类似 python中偏函数partial。用于函数的某些参数值已经提前知道的情况
  def add3num_1(x: Int, y: Int, z: Int) = x + "." + y + "." + z

  def add3num_currying(x: Int)(y: Int)(z: Int) = x + "." + y + "." + z

  def add3num_add1(y: Int)(z: Int) = add3num_currying(1)(y)(z)

  println(add3num_add1(8)(9)) // 1.8.9 只需要传后两个值

  def add3num_add1and2(z: Int) = add3num_add1(2)(z)

  println(add3num_add1and2(8))  // 1.2.8

  // 传递函数
  def fun_fun(f: Int => Int, x: Int): Int = f(x)

  def add_1(d: Int) = d + 1

  println(fun_fun(add_1, 5)) // 6 闭包,闭包一定和函数传递及调用的环境相关

  println((1 to 10).map(add_1)) // Vector(2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
}

“DT大数据梦工厂”团队第一个中国梦:免费为社会培养100万名优秀的大数据从业人员。每天早上4点起持续分享大数据、互联网+、O2O、工业4.0、微营销、移动互联网等领域的 
精华内容,帮助您和公司在DT时代打造智慧大脑,将生产力提高百倍以上! 

DT大数据梦工厂微信公众号:DT_Spark,二维码如下,期待大家加入!

scala 函数式编程_第1张图片

你可能感兴趣的:(scala,spark,DT大数据梦工厂)