Functional programming OO与FP |命令与FP
我经常遇到面向对象编程和函数式编程之间的比较,以及命令式编程和函数式编程之间的比较。“面向对象”和“命令式”是两个截然不同的术语,在我的理解中,它们彼此无关。不过,它们都可以与函数式编程相比较。面向对象编程和命令式编程之间的关系是什么,促使了这种比较?原因很简单,主流的OO编程(即Java、C#)是命令式编程的一个子类 下面是一个粗略的图表:Functional programming OO与FP |命令与FP,functional-programming,Functional Programming,我经常遇到面向对象编程和函数式编程之间的比较,以及命令式编程和函数式编程之间的比较。“面向对象”和“命令式”是两个截然不同的术语,在我的理解中,它们彼此无关。不过,它们都可以与函数式编程相比较。面向对象编程和命令式编程之间的关系是什么,促使了这种比较?原因很简单,主流的OO编程(即Java、C#)是命令式编程的一个子类 下面是一个粗略的图表: progamming / \ dec
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编程(即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
因此,适当的比较应该是:
- 命令式与声明式
- 面向对象与功能