函数式编程
函数式编程(Functional programming)或称函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。
函数式编程优点:
- 没有并发编程的问题,是多线程安全的
- 函数式编程的表达方式更加符合人类日常生活中的语法,代码可读性更强,实现同样的功能函数式编程所需要的代码比面向对象编程要少很多,代码更加简洁明晰
函数式编程缺点:
- 所有的变量在程序运行期间都是一直存在的,资源利用率低
- 大型项目中工程化不足,使得代码易读性降低
面向对象编程
面向对象程序设计(Object-oriented programming,OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
面向对象编程优点:
- 灵活,可维护,易拓展,在大型项目设计中广为应用
- 由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
- 23种设计模式广泛应用
面向对象编程缺点:
- 在多线程并发编程中,多个线程同时操作数据的时候可能会导致数据修改的不确定性。
- 为了写可重用的代码而产生了很多无用的代码,导致代码膨胀
- 为了面向对象而面向对象,使得代码易读性降低
- 代码的运行效率比起面向过程要低很多
命令式编程
命令式编程(Imperative programming),也叫指令式编程,是一种描述计算机所需作出的行为的编程典范。几乎所有计算机的硬件工作都是命令式的;几乎所有计算机的硬件都是设计来运行机器码,使用命令式的风格来写的。较高阶的命令式编程语言使用变量和更复杂的语句,但仍依从相同的典范。因为命令式编程的基础观念,不但概念上比较熟悉,而且较容易具体表现于硬件,所以大部分的硬件编程语言都是命令式的。
声明式编程
声明式编程(Declarative programming,DP)是一种编程范式,与命令式编程相对立。它描述目标的性质,让计算机明白目标,而非流程。声明式编程不用告诉计算机问题领域,从而避免随之而来的副作用。它通过函数、推理规则或者重写规则,来描述变量间关系,通过编译器采用固定算法,使得这些关系产生结果。
声明式编程是一个大的概念,其下包含一些有名的子编程范式。包括 约束式编程、领域专属语言、函数式编程、逻辑式编程。