目前有三种主流的说法,结构化编程、函数式编程、面向对象编程;他们分别限制了程序员写程序的能力
例子入门:
print (take 25 (map (fn [X] ( * X X) )))
上面的例子,其实等价于:
public class Squint { public static void main(String args[]){ for(int i=0;i<25;i++){ System.out.print( i*i); } } }
其实函数式编程对比OOP,最大的不同就是变量是不可变而且没有放在内存堆中;
函数式编程的变量是不可变的
做架构想要应用好函数式编程,那么就需要在设计中学会分离可变组件和不可变组件;可变组件通常可以抽象为命令
事件溯源:
eventSource就是函数式编程的一种体现;没有了变量,自然就可以避免并发的问题
版本控制:
其实git本身就是事件溯源的应用
什么是对象?继承、封装、多态?其实对象的核心是状态,当抽象出来的数据代表了状态,代表状态的数据可以脱离函数控制范围之后,使得OOP有了意义。而多态则约定,则直接限制了程序员的能力,对函数指针的控制能力。