📜  函数式编程-简介

📅  最后修改于: 2021-01-07 05:14:18             🧑  作者: Mango


功能编程语言是专门设计用于处理符号计算和列表处理应用程序的。函数式编程基于数学函数。一些流行的函数式编程语言包括:Lisp, Python,Erlang,Haskell,Clojure等。

函数式编程语言分为两类,即-

  • 纯功能语言-这些类型的功能语言仅支持功能范例。例如-Haskell。

  • 不纯功能语言-这些类型的功能语言支持功能范例和命令式编程。例如-LISP。

功能编程–特性

函数式编程的最显着特点如下-

  • 函数式编程语言是根据数学函数的概念设计的,该数学函数使用条件表达式和递归来执行计算。

  • 函数式编程支持高阶函数惰性求值功能。

  • 函数式编程语言不支持流程控制(例如循环语句)和条件语句(例如If-Else和Switch语句)。他们直接使用函数和函数调用。

  • 像OOP一样,函数式编程语言支持流行的概念,例如抽象,封装,继承和多态。

函数式编程–优势

函数式编程具有以下优点-

  • 无错误代码-功能编程不支持state ,因此没有副作用,我们可以编写无错误代码。

  • 高效的并行编程-功能编程语言没有可变状态,因此没有状态更改问题。可以对“功能”进行编程,使其作为“指令”并行工作。这样的代码支持简单的可重用性和可测试性。

  • 效率-功能程序由可以同时运行的独立单元组成。结果,这样的程序更加有效。

  • 支持嵌套函数-功能编程支持嵌套函数。

  • 延迟评估-函数式编程支持延迟函数构造,例如延迟列表,延迟映射等。

缺点是,函数式编程需要很大的存储空间。由于它没有状态,因此您每次都需要创建新对象来执行操作。

函数式编程用于必须对同一组数据执行许多不同操作的情况。

  • Lisp用于人工智能应用,例如机器学习,语言处理,语音和视觉建模等。

  • 嵌入式Lisp解释器为某些系统(如Emacs)增加了可编程性。

函数式编程与面向对象的编程

下表重点介绍了函数式编程和面向对象编程之间的主要区别-

Functional Programming OOP
Uses Immutable data. Uses Mutable data.
Follows Declarative Programming Model. Follows Imperative Programming Model.
Focus is on: “What you are doing” Focus is on “How you are doing”
Supports Parallel Programming Not suitable for Parallel Programming
Its functions have no-side effects Its methods can produce serious side effects.
Flow Control is done using function calls & function calls with recursion Flow control is done using loops and 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
Execution order of statements is not so important. Execution order of statements is very important.
Supports both “Abstraction over Data” and “Abstraction over Behavior”. Supports only “Abstraction over Data”.

程序代码的效率

编程代码的效率与算法效率和执行速度成正比。良好的效率可确保更高的性能。

影响程序效率的因素包括-

  • 机器速度
  • 编译速度
  • 操作系统
  • 选择正确的编程语言
  • 程序中数据的组织方式
  • 用于解决问题的算法

通过执行以下任务,可以提高编程语言的效率-

  • 通过删除不必要的代码或用于冗余处理的代码。

  • 通过利用最佳内存和非易失性存储

  • 在适用情况下使用可重用的组件。

  • 通过在程序的所有层上使用错误和异常处理。

  • 通过创建可确保数据完整性和一致性的编程代码。

  • 通过开发符合设计逻辑和流程的程序代码。

高效的编程代码可以在对操作环境造成最小风险的情况下,尽可能地减少资源消耗和完成时间。