比较函数式编程,命令式编程和面向对象的编程
什么是函数式编程?
简而言之,函数式编程(FP)是一种流行的编程范例,它可以像数学函数一样进行计算,而无需更改状态和更改数据。
在函数式编程中,函数是一等候选。
我们通过定义一组函数和不可变数据来编写程序。
FP语言的示例:-Scala,Haskell,Earlang等是流行的FP语言。
Java SE 8也具有一些功能构造(有关更多详细信息,请参阅Java 8帖子)
FP的特点是什么?
像Scala这样的函数式编程语言具有以下特征
- 状态不存在。
FP程序不包含状态。
这意味着所有数据都是不可变数据,功能不能更改状态。
- 执行命令的重要性低
在FP语言中,我们编写具有一组独立功能的程序。
函数包含一组语句。
在FP中,这些功能的执行顺序并不重要,因为它们没有状态并且所有功能都独立工作。
即使我们更改执行顺序,它们仍然会产生相同的结果。
- 无状态编程模型
所有FP程序均使用不可变数据和函数,无法修改该数据。
这意味着FP语言支持无状态编程模型。
- 职能是一等公民
在FP语言中,函数是头等对象。
函数是独立的单元,我们可以按任何顺序执行它们。
- 主要操作单位
在FP语言中,"主要操作"单位是功能和数据结构,因为所有程序都由使用这些单位组成。
- 模块化编程
在FP语言中,我们需要编写较小的独立单元,称为纯函数,以支持无状态编程模型。
这意味着FP比OOP支持更好的模块化。
- 高阶函数和惰性求值
函数式编程语言应支持高阶函数和惰性评估功能。
- 主要流量控制
FP语言不使用For ... Loop,Do ... While循环,While ... Loop等流控制,也不使用If..Else或者Switch语句之类的条件语句。
所有FP语言都使用以下内容编写程序:
- 职能
- 函数调用
- 递归函数调用
- 抽象,包容,继承和多态
像OOP一样,FP语言支持所有4个概念:抽象,封装,继承和多态。
FP语言支持带类型类或者隐式的继承。
他们借助泛型支持多态。
它也称为参数多态性。
FP的主要重点是什么?
与OOP语言不同,所有FP语言程序都主要关注"您在做什么"或者"要做什么"。
他们主要关注以下方面:
需要什么信息就是输入。
实际逻辑需要进行哪些转换。
这意味着FP主要集中在"要做的事情"上。
它并没有过多地关注"如何完成"。
那就是我们可以编写功能编程,就像问题域描述一样。
因此,不仅开发人员,而且其他人都可以非常轻松地理解FP代码。
现在,我们将讨论函数式编程的"优点和缺点"(优点和缺点)。
功能编程的优势?
函数式编程语言具有以下优点或者优点或者优点:
- 无错误的代码
由于FP语言不支持状态,因此不会产生任何副作用,这意味着我们可以编写无错误代码,无错误代码或者不太易出错的代码。
- 高效的并行编程
由于FP语言没有可变状态,因此不会引发任何状态更改问题。
这意味着他们仅使用不可变数据。
他们使用独立单元编写"功能"程序。
我们可以编写非常有效的并行或者并发编程,因为它们独立运行而不更改状态。
- 更好的性能
由于FP程序由所有独立单元组成,因此它们可以并行或者并行运行。
因此,FP应用程序可以获得更好的性能。
- 更好的封装
与OOP不同,FP通过纯函数支持更好的封装。
纯功能意味着没有副作用。
- 支持嵌套函数
嵌套函数意味着将函数与其他函数组合在一起以解决问题。
FP支持嵌套函数。
- 提高可重用性
由于FP程序由独立单元即"功能"组成,因此我们可以非常轻松地重用它们。
- 更好的模块化
在FP语言中,我们需要编写较小的独立单元,称为纯函数,以支持无状态编程模型。
这意味着FP比OOP支持更好的模块化。
- 轻松懒惰评估
在FP语言中,编写惰性评估非常容易。
它们支持惰性功能构造,例如惰性列表,惰性映射等。
- 提高可读性和可维护性
函数式编程(FP)还可以独立工作并且不会更改状态,因此也提高了可读性和可维护性。
- 提高可测试性
当我们使用独立单元(即"功能")编写FP程序时,我们可以非常轻松地对其进行单元测试。
- 支持行为抽象
与OOP不同,FP支持"基于数据的抽象"和"基于行为的抽象"。
因为真实世界包含这两者。
- 支持大数据
由于FP支持并行编程和更好的性能,因此FP非常适合开发BigData应用程序。
- 健壮可靠的代码
As FP uses Immutable Data, we can easily develop Robust and Reliable Code using FP.
函数式编程的缺点?
除了巨大的好处,函数式编程语言还具有很少或者很少或者很少的缺点。
它们只有以下缺点:
- 需要大量内存
FP没有状态。
他们总是创建新的对象来执行操作,而不是修改现有对象。
因此,FP应用程序占用大量内存。
- 不专注于Liskov换人
函数式编程的主要概念是什么?
以下概念是函数式编程的主要和重要概念。
一流的功能。
惰性评估。
高阶函数。
不变性(非可变数据)。
模块化。
无副作用。
惰性评估。
递归函数调用。
什么是命令式编程?
命令式编程(IP)是一种流行的编程范例,它以某种顺序执行一系列步骤/指令/语句。
IP语言示例:-Java,C,C++等
命令式编程的主要特征?
任何命令式编程(IP)语言都可以包含以下特征:
语句顺序。
语句的执行顺序非常重要。
它们包含状态。
它们同时使用不可变数据和可变数据。
他们可以更改状态。
它们可能有副作用。
有状态编程模型。
它们直接更改程序的状态。
它们用数据字段表示状态。
什么是面向对象编程?
面向对象编程是另一种编程范例。
它把所有东西都表示为一个对象。
每个对象都包含一些数据字段和方法。
所有OOP程序都包含状态。
他们使用可变数据和数据结构。
像FP一样,我们可以使用不可变数据编写完整的程序,但是它并不强制执行此规则。
面向对象编程(OOP)是命令式编程的超集。
它遵循IP的所有特性并具有一些另外的功能。
这些另外的功能是:
一切都是对象。
每个对象都包含一些数据字段和方法。
OOPs概念:抽象,封装,继承和多态
与功能编程语言不同,OOP语言主要关注"如何完成"。
这意味着作为开发人员,我们专注于"您的工作方式"。
此外,OOP结合了"您在做什么"和"您如何做"两者。
因此,我们无法编写简洁易读的代码。
只有开发人员才能理解代码,其他人可能会更困惑以了解应用程序代码,他们无法理解。
面向对象编程(OOP)的缺点?
尽管OOP解决了许多实时问题,但仍存在以下缺点(与FP相比):
它不支持完全的可重用性。
它不是完全模块化。
它打破了包囊概念。
继承有很多弊端。
继承的主要缺点:
- 打破封装原则
- 当继承级别增加时,很难维护和创建对象。
什么时候使用函数式编程?
在以下情况下,我们应该进行函数式编程(FP):
当我们要对已修复的数据执行许多不同的操作时。
换句话说,当我们很少进行更多操作时。
何时使用面向对象编程?
在以下情况下,我们应该进行面向对象编程(OOP):
当我们要对许多具有共同行为的不同变体执行少量操作时。
换句话说,当我们拥有更多东西而很少进行操作时。
注意:这里的事物是真实世界的对象,操作是真实世界的动作。
例如,在Java中,我们将这些现实世界的事物表示为"类",并将现实世界的动作表示为方法(操作)。
FP和OOP(IP)之间的区别?
Functional Programming | OOP |
---|---|
Does not exist State | Exists State |
Uses Immutable data | Uses Mutable data |
It follows Declarative Programming Model | It follows Imperative Programming Model |
Stateless Programming Model | Stateful Programming Model |
Main Fcous on: "What you are doing"; | Main focus on "How you are doing"; |
Good for Parallel (Concurrency) Programming | Poor for Parallel (Concurrency) Programming |
Good for BigData processing and analysis | NOT Good for BigData processing and analysis |
Supports pure Encaspulation | It breaks Encaspulation concept |
Functions with No-Side Effects | Methods with Side Effects |
Functions are first-class citizens | Objects are first-class citizens |
Primary Manipulation Unit is "Function"; | Primary Manipulation Unit is Objects(Instances of Classes) |
Flow Controls: Function calls, Function Calls with Recursion | Flow Controls: Loops, Conditional Statements |
It uses "Recursion"; concept to iterate Collection Data. | It uses "Loop"; concept to iterate Collection Data. For example:-For-each loop in Java |
Order of execution is less importance. | Order of execution is must and very important. |
Supports both "Abstraction over Data"; and "Abstraction over Behavior";. | Supports only "Abstraction over Data";. |
We use FP when we have few Things with more operations. | We use OOP when we have few Operations with more Things. For example: Things are classes and Operations are Methods in Java. |
以上就是三种流行的编程范例。