函数式编程热门词汇
函数式编程主题演讲及要点
函数式编程范式为我们的编码词汇增添了几个新词,为了便于理解:如果我们以正确的方式使用函数式编程,我们可能会获得荣誉(或奖励),这与如果我们以正确的方式使用函数式编程,我们可能会获得荣誉(或奖励)是相同的。
honorificabilitudinitatibus
能够获得荣誉(或奖励)
就像函数式编程抽象功能逻辑一样,我们需要玩转词汇,将含义抽象成这些新的流行语,最终当我们理解了它的真正含义时,我们会意识到它并不像听起来那么困难和可怕。
流行语:
复数名词:流行语 指
在特定时期或特定语境中流行的词语或短语,通常是行话。
让我们来看一下函数式编程中会遇到的一些定义:
关键词:
参考透明度:
当一个表达式可以被其对应的值替换而不改变应用程序的行为时,就称该表达式是引用透明的。
声明式:
函数式编程(FP)是一种声明式软件开发风格,与其他范式(如命令式编程或面向对象编程)一样,它将“函数”和“数据”分离,
不允许双向数据绑定。
范例:
简单来说,它是一种基于某种遵循原则的开发风格的软件构建思维方式。
抽象概念:
隐藏细节(让我们忽略细节),使我们能够以更高(或更抽象)的层次来讨论问题。
功能组合:
组合是指我们可以将多个函数连接起来,形成一个链式调用,其中第一个函数的返回值会成为下一个函数的输入。
函数组合是将两个或多个函数组合起来,以生成一个新函数或执行某些计算的过程。
头等舱:
在 JavaScript 中,函数是“一等公民”对象,这意味着函数本身具有值:
const name = "Leo";
一等函数:
这意味着你可以将函数存储到变量中:
const subName = function(a,b){ return name + a + b };
高阶函数:
高阶函数是指可以接受另一个函数作为参数,或者返回一个函数作为结果的函数。
在 JavaScript 中,函数既是“一等公民”,也是“高阶函数”。
副作用:
修改数据可能会导致意想不到的副作用。
副作用是指在计算结果过程中发生的系统状态变化或与外部世界的可观察交互。
副作用包括(并非完整列表):
- 修改任何外部变量或对象属性(全局变量或父函数作用域链中的变量)
- 正在将日志记录到控制台
- 对着屏幕写字
- 写入文件
- 发出网络请求
- 触发任何外部过程
- 调用任何其他具有副作用的函数
- 主要执行 I/O 操作
- 修改 DOM 树
- 使用 Date()
纯函数:
- 给定相同的输入,始终返回相同的输出(纯函数)
- 没有副作用(不可变)这意味着函数体不能依赖于其参数之外的变量,除非这些变量在程序的生命周期内是常量。
不变性:
不可变对象是指创建后不能被修改的对象。相反,可变对象是
指创建后可以被修改的对象。
递归:
递归函数就是调用自身的函数。
递归(请用递归代替 for 循环或 while 循环)
共享状态
函数式编程避免使用共享状态,而是依赖不可变数据结构和纯计算。
共享状态是指存在于共享作用域中的任何变量、对象或内存空间,或者作为对象属性在不同作用域之间传递时的状态。
咖喱化:
柯里化是指函数不会一次性接收所有参数。相反,它会先接收第一个参数,然后返回另一个使用第二个参数的函数,这个函数又会返回第三个使用第三个参数的函数……依此类推!
记忆化:
运行成本高的函数可以通过记忆化进行优化。记忆化是指使用闭包来缓存先前函数调用的结果。
函子
函子就是可以进行 .map 操作的对象。
单子:
Monad 是一种函子,但它也实现了 Applicative 和 Chain 规范。Monad
可以被视为一个值的容器,
要打开这个容器并对其中的值进行操作,需要对其进行映射。
函数式编程和响应式编程:
函数式编程和响应式编程应被视为两种不同的编程范式。函数式编程侧重于将函数解释为数学函数——无状态且无副作用。而响应式编程则侧重于将变化以事件流的形式传播。函数式响应式编程一词指的是响应式编程的超集。
响应式函数式编程:
响应式编程(RFP)并非函数式编程(FP)。响应式编程是一种范式,它几乎可以在任何地方使用“异步数据流”。一切皆流。RFP
是一种完全使用随时间变化的值流来创建应用程序的范式。
与函数式编程类似,我们希望避免任何可变状态,并通过组合纯函数来进行编程。
命令式编程:
命令式编程是一种编程风格,程序员通过告诉计算机“如何”做事来告诉计算机做什么。命令式编程催生了我们日常使用的许多结构:控制流(if-then-else语句和循环)、算术运算符(+、-、*、/)、比较运算符(===、>、<等)和逻辑运算符(&&、||、!)。
命令式编程与函数式编程:
命令式编程方法中,开发者编写的代码会详细描述计算机为实现目标(如何做)必须采取的步骤。
而函数式编程方法则涉及将问题组合成一组要执行的函数(做什么)。
在命令式编程中,被执行的函数是获取和转换数据的主要方式,而
函数式编程是无状态的。由于没有状态,函数式语言只需查看纯函数的输入和输出即可理解其逻辑。
声明式/函数式编程 vs 命令式/过程式编程:
- 函数式编程:是一种声明式范式,这意味着程序逻辑的表达无需明确描述流程控制:“它需要做什么”。
- 命令式程序:用代码行描述实现预期结果的具体步骤,即流程控制:“如何做事”。
光学:
光学(Optics)是函数式编程中的一个概念,它可以帮助我们减少需要编写的代码量,并提高操作的可读性。当我们处理不可变数据结构时,使用光学的优势尤为显著。
反射:
函数式编程没有反射机制。
反射是指代码在运行时检查和修改程序结构和行为(特别是值、元数据、属性和函数)的能力,因此它实际上是在操作或调用对象的属性或函数,就像 JavaScript 中的 eval() 函数一样。
纯对象:
在 JavaScript 中,纯对象是指其原型中不应该包含任何函数的对象。
函数式编程:
函数式编程是一种编程范式,在这种范式中,我们创建的函数仅依赖于其输入来执行逻辑。这确保了函数在多次调用时返回相同的结果。此外,函数不会更改外部世界的任何数据,从而使代码库易于缓存和测试。
函数式编程的详细定义:
函数式编程是一种“声明式”的软件构建“范式”,它通过“组合”纯函数来避免“共享状态”、“可变数据”和“副作用”。它主要强调使用函数来获得结果;其目标是“利用这些函数抽象控制流和数据操作,并将它们作为构建模块”,通过依赖“JS 一流函数”和“高阶函数”来提高代码的模块化、可预测性和可重用性。
实用FP定义:
函数式编程的核心在于将程序拆解重组,将各个部分组合在一起,也就是将函数组合在一起。这意味着我们需要让一个函数的输出作为下一个函数的输入。为了实现这一点,我们应该避免共享可变状态和副作用(使用纯函数)。
函数式编程热门词汇:
https://github.com/leolanese/Functional-Programming-buzzwords
【下一篇】函数式编程相关文章:
* 从 ReactJS 和 Angular 的角度看函数式编程
* 用函数式编程让单元测试再次充满乐趣
谢谢!
{ 'Leo Lanese',
'构建鼓舞人心的响应式解决方案',
'英国伦敦' }
投资组合http://www.leolanese.com
推特:twitter.com/LeoLaneseltd
如有任何疑问/建议/推荐,请联系developer@leolanese.com
DEV.to:www.dev.to/leolanese
博客:leolanese.com/blog
文章来源:https://dev.to/leolanese/featured-programming-buzzwords-36c1