函数式 vs 指令式
个人的感觉其实并不拘泥于某种形式,也不太擅长形而上,在一开始只要实用,只能能够解决问题就好,
很多的感悟,窍门都是日久以后,自然而然得来的,但是并不等于能够放弃相对微观的细节,也不能无视较为宏观的原理和概念层面,对!我就是喜欢从中间切入,从实践开始,然后向上下两端进行探索。
题外话了,不多扯。
函数式,具体点就说scala吧,我相信大部分都是有java功底的,那么一开始用java作为对照就是个自然而然的思维方式,没什么不好,但是如何入手呢?
我自己是从重写GoF开始的,写完我自己有一个感觉,所有的DP在函数式面前都失去了作用,为什么?归根结底,其实就是因为DP就是用接口承载函数,转成对象后达到可以传递的目的。
JAVA的代码在函数式面前显得过于的间接,结构过于的臃肿,所有的DP都可以不用接口直接用高阶函数参数来完成。
那么问题来了,如果高阶函数如此有效,那么函数式的其他特性又有什么存在的意义呢?答案在于组合!
没错,JAVA社区倡导的“组合而非继承”其实在函数式的领域已经是一个近乎可以考古的命题了,函数式生来就是这么做的。
函数式的组合,同源的思想,通过小的细粒度的原材料组合出大的复杂的整体,但区别在于内部的结构复杂度被有效的降解了,逻辑复杂度是不会改变的,无关于用何种技术何种语言,系统的逻辑复杂度是零和的,框架或者语言也是一样的,表面越简单,内部越复杂,scala摒弃原生实现,而采用外挂库其实是转嫁复杂度到语言外部去,但好处是得到了精简,以及灵活的机制,这个很重要。
从另一个角度感受的话,函数式变成提供了更加细粒度的结构化能力,更加的轻量,灵活,确更加难懂了。
好在scala是typesafe的,这点非常喜欢。