比较函数式编程,命令式编程和面向对象的编程

时间:2020-02-23 14:41:21  来源:igfitidea点击:

什么是函数式编程?

简而言之,函数式编程(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 ProgrammingOOP
Does not exist StateExists State
Uses Immutable dataUses Mutable data
It follows Declarative Programming ModelIt follows Imperative Programming Model
Stateless Programming ModelStateful Programming Model
Main Fcous on: "What you are doing";Main focus on "How you are doing";
Good for Parallel (Concurrency) ProgrammingPoor for Parallel (Concurrency) Programming
Good for BigData processing and analysisNOT Good for BigData processing and analysis
Supports pure EncaspulationIt breaks Encaspulation concept
Functions with No-Side EffectsMethods with Side Effects
Functions are first-class citizensObjects are first-class citizens
Primary Manipulation Unit is "Function";Primary Manipulation Unit is Objects(Instances of Classes)
Flow Controls: Function calls, Function Calls with RecursionFlow 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.

以上就是三种流行的编程范例。