功能编程 - JavaScript
#javascript #编程 #功能

今天,我想谈论功能编程,这对于JavaScript开发人员来说已经非常受欢迎。
简而言之,功能编程是一种范式,在使用纯函数的应用程序中,
避免共享可变状态和副作用。功能编程通常比命令更声明性,这意味着我们表达了做什么而不是如何做。
功能代码更简洁,更可预测,我们几乎可以确定结果将是什么,因此比任意命令或面向对象的代码更容易测试。
让我们解释一下我们在功能编程中拥有的所有基本和重要概念。
首先,这是纯函数,让我们解释一下。纯函数是一个函数,首先:始终返回相同输入的相同输出。例如,在数学中,纯函数为

sinx

我们确切地知道x将是
30度,答案为1/2。
我们在功能编程中没有副作用,这意味着没有局部静态变量,非本地变量,可突出参考参数或输入/输出流的突变。
函数组成:这是我们将一个或多个函数结合到某些计算时的过程。例如,如果我们具有函数g(x)和它们的另一个函数组成,则将是新功能h (x)= f(g(x));

共享状态:是状态,在多个函数或多个数据结构之间共享。当状态不变时(无法更改),这是相对无害的,基本上是一种存储机制。如果共享状态是可变的,并且由多个线程同时使用,则该程序将需要使用锁或其他机制来在状态下操作。
不变性:不变性是一个关键概念,因为没有它,我们就会失去所有国家的流动,我们将失去国家的变化历史。
副作用:与该功能最终输出无直接相关的任何操作称为副作用。例如,写入文件是副作用,或修改任何外部变量或对象属性(例如,在父函数范围链中的全局变量或变量)。
功能编程中大多避免了副作用,这使得程序的效果更容易扩展,
重构,调试,测试和维护。

让我们考虑一个构图的示例,假设我们有2个函数,我们希望在编写日志当前值之间。
让我们以以下两个功能以获得更多可见性。

code of two give functions

让我们写这三个功能的联合:

union of the functions

我们从代数中知道(fâg)(x)= f(g(x)),让我们通过代码重写相同的内容,我们将拥有类似的东西
union of the functions

就是这样,我们可以以更通用的方式描述这种功能结合,直接将功能作为参数。

Image description

我们知道我们要记录每个功能返回的结果。
让我们编写一个记录器函数,该功能获取标签和要打印的值并返回它,因此链接过程不会被打破,并且从此值中我们计算一个新值。
trace function

现在,让我们按顺序将功能放置,之后我们希望它们被执行。

Image description