【编程范式】范式新感悟
范式
目前有三种主流的说法,结构化编程、函数式编程、面向对象编程;他们分别限制了程序员写程序的能力
- 结构化编程批判了go to,引入循环、分支等结构保证了程序的安全稳定性;
- 自从发明了变量可以放到内存后,函数变量可以在函数退出后继续存在于内存中,引出面向对象编程;
函数式编程
例子入门:
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有了意义。而多态则约定,则直接限制了程序员的能力,对函数指针的控制能力。