1. 程式人生 > >scala函數語言程式設計

scala函數語言程式設計

什麼是函數語言程式設計

在面向物件程式設計中,我們把**物件傳來傳去, 那在函數語言程式設計中,我們要做的是把函式**傳來傳去,而這個,說成術語,我們把他叫做高階函 數。 – 在函數語言程式設計中,函式是基本單位,是第一型,他幾乎被用作一切,包括最簡單的計算,甚至連變數都被計算所取代。在函數語言程式設計中,變數只是一個名稱,而不是一個儲存單元,這是函數語言程式設計與傳統的指令式程式設計最典型的不同之處。 • 函數語言程式設計的抽象本質則是將函式也作為一個抽象單位,而反映成程式碼形式,則是高階函式。

object TestFunc {

  type FilterFunc = Array[String] => Boolean

  //方法返回值是一個函式
  def buildFun():FilterFunc={

    (arrStr:Array[String])=>{
      arrStr(1).equals("0")
    }
  }

  //  def isRight(): FilterFunc ={
  //
  //  }





  def sayMyName(name: String = "Jack"): Unit = {
    println(name)
  }

  def sumMoreParmeters(elem: Int*): Int = {
    var sum = 0
    for (e <- elem) {
      sum += e
    }
    sum
  }

  def add(a: Int, b: Int): Int = a + b

  def add2 = add(_: Int, 4)

  def fac(n: Int): Int = if (n <= 0) 1 else n * fac(n - 1)

  //函式柯里化
  //
  def mulitply(x: Int)(y: Int) = x * y

  def m2 = mulitply(2) _

  val t = () => 333

  def testfun02(fn: () => Int) = {
    println(fn())
    1000

  }

  val d1 = (a: Int) => a + 100

  def testfn1(callback: (Int, Int) => Int) = {
    println(callback(123, 123))
  }

  def add3(x: Int, y: Int, z: Int): Int = {
    def add2(x: Int, y: Int): Int = {
      x + y
    }
    add2(add2(x, y), z)
  }


  def main(args: Array[String]): Unit = {
    println("staty")

    sayMyName("rose")
    val sum: Int = sumMoreParmeters(5, 3, 4, 5, 6, 76)

    println(sum)

    println(add(2, 3))
    println(add2(2))

    val rs: Int = fac(5)
    println(rs)

    val f = (a: Int, b: Int) => {
      println(a * b)
      a + b
    }
    println("=====")
    testfn1(f)
  }


}