什么是函数式编程
在面向对象编程中,我们把**对象传来传去,
那在函数式编程中,我们要做的是把函数**传来传去,而这个,说成术语,我们把他叫做高阶函
数。
– 在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处。
• 函数式编程的抽象本质则是将函数也作为一个抽象单位,而反映成代码形式,则是高阶函数。
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)
}
}