OO vs FP |命令与FP

时间:2014-01-20 22:56:02

标签: functional-programming

我经常遇到面向对象和函数式编程之间的比较,以及命令式和函数式编程之间的比较。 “面向对象”和“命令式”是两个截然不同的术语,在我的理解中,它们彼此无关。不过,它们都与功能编程相比。面向对象和命令式编程之间的关系是什么促使这种比较?

1 个答案:

答案 0 :(得分:4)

原因很简单,主流OO编程(即Java,C#)是命令式编程的子类别。

这是一张粗略的图表:

                   progamming
                   /        \
              declarative   imperative
                 /    \          /   \ 
         functional    \        OO   procedural  
                       logic 
                       (prolog)

在声明性编程中,您说出您想要计算的内容。假设我们想要计算链表的长度:

  • 空列表的长度为0
  • 非空列表的长度比该列表尾部的长度多一个。

在命令式编程中,您基本上按照特定顺序操作内存:

int length = 0;              // put starting value in memory
while (!list.isEmpty()) {
   length++;                 // update memory
   list = list.next();       // update list pointer for next iteration
}
// result is in memory location associated with length

因此,正确的比较将是:

  • 命令式与声明型
  • OO vs functional