什么是函数式编程?网上答案五花八门,有从历史开始阐述,有从Lambda演算开始,有从函数式编程和面向过程和面向对象的比较出发,有从函数式编程的特点闭包,高阶函数,柯里化(currying)开始,有从特定语言出发(JS,python,kotlin)开始讲。有的很吓人,有的很啰嗦,有的过于简单,有些不适合入门。我提取了前人的一些精华和自己的一些感悟斗胆尝试解释一下,希望对入门的同学有所帮助,就欣慰不已。
函数式编程中,函数是“一等公民”,“一等公民”在所有介绍函数式编程的文章都有提到,“一等公民”指的是函数和变量对象地位是一样的,可以将函数赋值给变量,可以作为参数,可以作为函数的返回值,函数式编程的其他特点都是由这三个特点推导出来的,这三个特点是函数式编程的基础。可能有人会举手,这三个特点在面向过程和面向对象语言中,函数指针可以实现类似的功能。的确,函数指针确实可以实现类似功能,也许那些支持函数式编程的语言在底层可能就是通过函数指针来实现的。只不过是支持函数式编程语言由于对这部分有了专业的支持,在实现上更简单,更方便。这三个特点对于熟悉面向过程和面向对象编程的同学仍然会有一些别扭。下面我就通过Kotlin语言来介绍一下这三个特点。大家可以通过Kotlin官网 这个网址的“TRY ONLINE”运行相关代码,如果对Kotlin不是很熟悉,只要看一下如何定义变量,如何定义函数就可以了,最好能够实际操作一下,想必是极好的。
1 将函数赋值给变量