美文网首页软件测试Python专家之路程序员
软件工程快速入门教程10- 函数式编程

软件工程快速入门教程10- 函数式编程

作者: python测试开发 | 来源:发表于2019-07-20 09:04 被阅读59次

什么是函数编程?

函数式编程(也称为FP Functional Programming)是一种通过创建纯函数来思考软件构造的方法。它避免了在面向对象编程中观察到的共享状态,可变数据的概念。

功能语言依赖于表达式和声明而不是执行语句。因此,与依赖于本地或全局状态的其他过程不同,FP中的值输出仅取决于传递给函数的参数。

函数式编程的特点

  • 函数式编程方法侧重于结果,而不是过程
  • 重点是要计算的内容
  • 数据是不可变的
  • 函数式编程将问题分解为'函数
  • 它建立在数学函数的概念之上,它使用条件表达式和递归来执行计算
  • 它不支持迭代,如循环语句和条件语句,如If-Else

函数式编程的历史

  • 功能编程的基础是Lambda Calculus。它是在20世纪30年代开发的,用于功能应用,定义和递归
  • LISP是第一个函数式编程语言。麦卡锡于1960年设计了它
  • 在70年代后期,爱丁堡大学的研究人员定义了ML(元语言)
  • 在80年代早期,Hope语言为递归和等式推理添加了代数数据类型
  • 在2004年的功能语言创新'Scala'。

函数式编程语言

任何FP语言的目标都是模仿数学函数。但是,函数编程的基本计算过程是不同的。

这里是一些最着名的函数式编程语言:

  • Haskell
  • SML
  • Clojure
  • Scala
  • Erlang
  • Clean
  • F#
  • ML/OCaml Lisp / Scheme
  • XSLT
  • SQL
  • Mathematica

基本函数编程术语和概念

  • 不可变数据
    不可变数据意味着您应该能够轻松地创建数据结构,而不是修改已存在的数据结构。

  • 参考透明度
    功能程序应该像第一次那样执行操作。因此,您将了解在程序执行期间可能发生或可能不发生的事情及其副作用。在FP术语中,它被称为参照透明度。

  • 模块化
    模块化设计提高了生产力。小模块可以快速编码并且具有更大的重复使用机会,这肯定会导致程序的更快开发。除此之外,模块可以单独测试,这有助于您减少单元测试和调试所花费的时间。

  • 可维护性
    可维护性是一个简单的术语,这意味着FP编程更容易维护,因为您不必担心意外更改给定函数之外的任何内容。

First-class是一种定义,归因于对其使用没有限制的编程语言实体。因此,
First-class可以出现在程序的任何地方。

  • 闭包
    闭包是一个内部函数,即使在父函数执行后也可以访问父函数的变量。

  • 高阶函数
    高阶函数要么将其他函数作为参数,要么将它们作为结果返回。

高阶函数允许部分应用或currying。此技术一次将一个函数应用于其参数,因为每个应用程序返回一个接受下一个参数的新函数。

  • 纯函数
    “纯函数”是一个函数,其输入被声明为输入,并且不应隐藏它们。
Function Pure(a,b)
{
    return a+b;
}
  • 非纯函数
    纯函数作用于它们的参数。如果不返回任何东西,它效率不高。而且,它为给定的参数提供相同的输出
int z;
function notPure(){
    z = z+10;
}

### 函数组合
函数组合结合了两个或更多功能来制作新功能。

- 共享共享状态
共享状态是OOP编程中的重要概念。它正在向对象添加属性。例如,如果HardDisk是对象,则可以将存储容量和磁盘大小添加为属性。

副作用是在被调用函数之外发生的任何状态变化。任何FP编程语言的最大目标是通过将其与其他软件代码分离来最小化副作用。在FP编程中,从其他部分中消除副作用至关重要.

### 参考资料
- [python测试开发项目实战-目录](https://china-testing.github.io/practices.html)
- [python工具书籍下载-持续更新](https://china-testing.github.io/python_books.html)
- [python 3.7极速入门教程 - 目录](https://china-testing.github.io/python3_quick.html)
-   讨论qq群630011153 144081101
- [原文地址](https://china-testing.github.io/pptx.html)
-   [本文涉及的python测试开发库](https://github.com/china-testing/python-api-tesing) 谢谢点赞!
-   [本文相关海量书籍下载](https://github.com/china-testing/python-api-tesing/blob/master/books.md)

### 函数式编程的好处
- 允许您避免混淆代码中的问题和错误
- 更容易测试和执行单元测试和调试FP代码。
- 并行处理和并发
- 热代码部署和容错
- 使用更短的代码提供更好的模块化
- 提高开发人员的生产力
- 支持嵌套函数
- 函数构造,如懒惰地图和列表等。
允许有效使用Lambda Calculus
功能编程的局限性
函数式编程范式并不容易,因此初学者很难理解
在编码期间很难维护尽可能多的对象
需要大量的嘲弄和广泛的环境设置
重用非常复杂,需要不断重构
对象可能无法正确表示问题
功能编程与面向对象编程
功能编程

OOP

FP使用不可变数据。

OOP使用Mutable数据。

遵循基于声明式编程的模型。

遵循命令式编程模型。

重点是:“你在做什么。在计划中。”

它的重点是“你如何进行编程”。

支持并行编程。

不支持并行编程。

它的功能没有副作用。

方法会产生很多副作用。

使用带递归的函数调用和函数调用执行流控制。

流控制过程使用循环和条件语句进行。

陈述的执行顺序不是很重要。

陈述的执行顺序很重要。

支持“数据抽象”和“行为抽象”。

仅支持“数据抽象”。

结论

功能编程或FP是基于一些基本定义原则思考软件构建的一种方式
功能编程概念侧重于结果,而不是过程
任何FP语言的目标都是模仿数学函数
一些最着名的函数式编程语言:1)Haskell 2)SM 3)Clojure 4)Scala 5)Erlang 6)清洁
“纯函数”是一个函数,其输入被声明为输入,并且不应隐藏它们。产出也被宣布为产出。
不可变数据意味着您应该能够轻松地创建数据结构,而不是修改已存在的数据结构
允许您避免混淆代码中的问题和错误
功能代码并不容易,因此初学者很难理解
FP使用不可变数据,而OOP使用Mutable数据

相关文章

网友评论

    本文标题:软件工程快速入门教程10- 函数式编程

    本文链接:https://www.haomeiwen.com/subject/lzhylctx.html