今天在随便看一些文章及思考的时候,突然就悟到了,这种感觉就象当年某一天领悟了面向对象。哈哈,我终于打通了任督二脉.
顺便看下,园龄刚好10年了。
当年理解面向对象后随手写了这篇:
http://www.cnblogs.com/DSharp/archive/2005/01/28/98632.html
面向对象编程的两顶帽子
其实就是理解了面向对象的根本,定义和实现的两个面,通过接口关联了起来。世界都是通过这种方式来分类呈现的。所谓易经的阴和阳,阴阳转化不过如此。
今天领悟到的,就是易经里的那个不易,不变,就是函数式,函数的不变性,一致性,函数作为描述抽象及原理的,作为第一类的函数first function,就是终极。
所有的变化,最后都通过函数串了起来。而变化的后面,就是不变,以不变应万变。函数就是相当于太极,无级就图灵机,Lambda,太极就是函数。
易有太极,始生两仪,两仪生四象,四象生八卦。
函数产生了定义及调用。又产生了参数和返回值。最后组成了对象的定义和实现,然后派生了整个计算机世界。
可见,函数式编程的first function,改为all function也是可以的。先抛开函数式和面向对象的混合编程。我们来窥探下函数式。
函数的终级原理就是函数,函数是纯数学模型,具有不变性。比如function add(a, b) {return a + b};这就是函数式编程的原子。它就是一条数学规则。一致的输入产生一致的输出,比如我们给入1,1,给出永远是2.
那么函数式编程所架构的世界观,就相当于我们现实世界的物理及宇宙法则。变量是什么?是一个输入,为什么会有最初始的输入,这个已经无需考证,从虚空的无极诞生了太极,道生了一,然后就开始函数式演变了。
所以函数式编程的特点就在于所处规则,至于输入,在现实当中顺其自然就OK,我们关心的就是规则,比如上面的Add,这个规则一但实现,那么就可以搞定所有的加法,这就是函数式的威力,你就象是计算机中的上帝,你需要的就是制定规则。
那么函数式开发和现在流行的开发差异在哪里?我们搞面向对象,我们要去做实体,数据,控制器,业务逻辑,所有都是在模拟现实,而对象是什么?是变化的中间态,个体,实体,1,是一个对象,2,又是一个对象,张三是一个,李四又是一个。
然后呢,我们去做对象的类,就是类型抽象,人是一类,动物是一类,不停的分类,最终你会发现,分类也是无穷无尽的。这是一个永完也做不完的任务。
而函数式呢?定义规则,或者说声明,声明式编程,我们根本无需考虑类型和实体。所以说类型表面上好象很厉害,实际上,天地以万物为走狗,在上帝眼里,码农和土豪是一样一样的。
我们只要分规则就可以,一条大规则太复杂,怎么办呢?细分,函数嵌套,高阶函数,柯里化,比如add(funa(a), funb(b)), 规则要反复使用呢?递归。
在函数规则上使用几个大原则,世界就被定义出来了。这就是函数式!
当然了,理解了只是入世,我们还要出世赚钱,穷则省吃俭用,达则请客吃饭,接下来,理论联系实际,干出点有用的东西,还是需要不断的学习及探索的。