Jruing 2020-11-01
函数式编程已经存在了六十年了,但是到目前为止,它并没有停止克服面向对象编程的普遍使用。 随着机器学习和大数据的爆炸性增长,由于可以并行化纯函数的简单性,函数式编程正变得越来越流行。 数据分析任务和工作流的代码也更易于遵循,测试和维护,使用功能范式有助于日后的使用。
甚至像Java和Python这样的面向对象的编程语言也从内置于地图,过滤器和简化功能的功能性编程中采用了巨大的概念。 它们还具有声明纯内联lambda函数以及创建一等和高阶函数以将函数作为参数传递的功能。
简而言之,函数式编程需要为固定变量构建纯函数并通过其响应更改状态。 相反,其他编程语言具有通过更改程序中变量引用来更改应用程序状态的能力。 您可以在本文中了解功能编程与面向对象程序的更多区别。
由于其纯粹的性质,函数式编程对于令人垂涎的任务(如机器学习和数据分析)印象深刻。 但是,这并不意味着您应该放弃其他编程语言而完全发挥作用,因为每种编程语言都具有比其他编程语言更好的任务。 但是,至关重要的是要学习基本原理,以便在必要时可以将其应用于自己的利益。 出于这些原因,功能编程被称为未来,但也许机器学习和大数据的未来才是软件开发的全部。
考虑到这一点,让我们看看为什么软件开发人员会爱上函数式编程,使它成为未来计算机科学的组成部分。 我们还考虑一下面向对象编程的一些功能,看看功能性编程是否可以完全替代它。 剧透:两者可能会在软件开发甚至同一应用程序中共存。
纯函数的使用
纯函数会重复产生相同的结果,并且没有影响最终结果的外部值。 由于纯函数的这一特性,使用函数编程创建的算法可轻松识别和纠正错误。
纯函数通常采用数学求解方法。 例如,如果您在计算器中键入3 + 3,答案将为6。纯函数也是如此。 不涉及外部元素,因此使功能程序纯净。 一个示例是内联lambda函数,该函数将n作为输入并返回n + n。
调试对于程序员和开发人员都是一个长期的问题,这就是为什么他们转向功能编程的原因,因为它的程序由于使用纯函数而易于调试。
最佳透明度
> Photo by Pixabay on Pexels.com
纯函数的使用使函数式编程完全透明。 函数式编程语言中纯函数和不纯函数之间的显着区别极大地提高了这些程序实现的透明性。
此外,纯函数仅在不考虑外部元素的情况下工作。 这意味着他们仅处理用户的条目。 相反,非功能性编程语言会导致额外的输入和返回输出,这些输入和返回输出与用户的信息有些不同。
由于函数式编程不涉及任何外部元素,因此该算法不会偏离用户的输入。 因此,无论输出如何,它都符合信息并且没有任何危险的方面。
提高可读性
函数式编程提供了许多好处,包括提高了值的可读性。 使用纯值意味着它们的状态一直保持到最后。 这些值还增强了程序的可读性,这使开发人员不必费力即可掌握代码。
由于绝大多数函数式编程语言都是高级语言,并且用户将每个函数都视为一种价值,因此对于开发人员而言,毫不费力地调用该函数程序并将这些值最终合并到其他各种函数中即可。
静态变量
用外行的语言来说,"变量"是不断变化的状态。 但是,这与功能编程相反。
在这里,程序员/开发人员无法立即修改变量; 它已经被煽动。 人们可能会认为,变量的恒定性与递归结合可能会导致性能下降。
但是,有必要理解此功能可确保程序直到最后都保持不变。 除了函数式编程通过使用纯函数提供的宝贵保护外,这种方法还使函数式编程语言在安全性方面优于同类语言。
安全性是软件开发中的关键要素,促使开发人员转向功能编程以提高其系统安全性。
无缝并行编程
> Photo by Isaac Quesada on Pexels.com
通常认为函数式编程具有开发完整的并行程序的能力。 不可否认,开发应用程序是最容易被理解的使用方案之一,尤其是在采用功能性编程的开发人员中。
其背后的主要因素是各种函数式编程语言中变量的静态应用。 由于纯函数不会修改变量,而只能在用户输入上起作用,因此处理并行性变得不太复杂。
此外,考虑到程序的可靠性提高,大大减少了出错的余地,从而提高了程序的效率。
验证功能签名
签名验证是软件开发的关键方面。 与其他排除函数程序的方式相比,函数程序设计因其使函数签名极其有效和值得的能力而受到高度评价。 函数式编程语言的纯变量可确保签名概述有关函数工作的所有信息以及其参数详细信息和任何其他必要的详细信息。
此外,这是功能编程成为软件开发的未来的另一个实际原因。
作为一种功能性编程语言,Scala允许开发人员同时使用OOP和FP(功能性编程)编写代码。 Scala主要致力于使用专有的纯函数和恒定值编写软件。 该语言正在逐渐发挥作用。
为什么函数式编程不会弃用面向对象的编程
> Photo by Christina Morillo on Pexels.com
面向对象编程(OOP)已成为软件开发的重要组成部分。 尽管引入了许多编程语言(例如C ++和Java),但是希望开发移动软件的开发人员必须掌握面向对象的方法。 考虑到OOP语言(例如PHP和Python)的流行,这同样适用于复杂的Web开发。
一些IT专业人员认为面向对象的编程已过时,因此掌握其概念完全是浪费时间。 他们发现使用对象代替像Visual Basic这样的语言中的传统编程的自上而下的方法是不合逻辑的。
如果您已经编写了此类软件的代码,则可能习惯于将复杂的问题分解为不太复杂的问题,并以代码为单位分别解决它们。 如果您对函数式编程有所了解,可以将代码元素视为适当的数学函数,并禁止它们篡改其他方面,即,输出反映了用户的输入。
尽管功能编程越来越流行,但是仍然使用面向对象的编程。 函数式编程未弃用OOP的一些原因包括:
通过继承重用代码
假设一个人除了您的桌子对象还想要金属桌子对象,而另一个人需要玻璃对象。 每个人都单独构建对象,但是却意识到它们之间的相似之处。 每个对象只是一个不同类型的表。 这就是继承方法证明可以节省时间的地方。 在这里,您需要创建一个通用类(表),然后定义子类(金属和玻璃)以采用通用玻璃功能。
当然,金属和玻璃桌具有其独特的品质和功能。 由于两者之间存在相似之处,因此两个继承类可以重用主流代码,而不必再次编写这些函数。
例如,如果您想对所有表对象进行更改,而不论其类型如何,您所需要做的就是对表类进行调整,并且所有表对象都将采用新代码。 这就是为什么某些开发人员仍然更喜欢OOP而不是函数式编程的原因。
多态性的灵活性
根据上面的示例,您不需要很多功能即可上手。 例如,金属和玻璃物体具有某些共性,但每个物体都有其他独特的特征。
有效的问题解决
像C这样的编程语言在编程世界中享有良好的声誉,但是除非您对此感到满意,否则强烈建议不要使用自上而下的语言开发软件。 这是因为由于复杂性,项目崩溃的可能性更高。 另一方面,以功能编程语言(例如Haskell或ML)编写程序可以是常规的。
一旦开始使用面向对象的编程,它通常是最自然,最明智的方法。 OOP语言使开发人员可以将您的软件分为中等大小的问题,这些问题可以独立解决。
数据抽象
数据抽象不会向用户显示琐碎的元素; 相反,它仅显示基本细节。 例如,汽车被视为车辆,而不是其零件。
数据抽象被称为仅指出忽略无关细节的对象必不可少的特征的过程。 对象的功能和特性使它与其他具有相似性的对象区分开来,以帮助对对象进行分类/分组。
以某人操作计算机为例。 他只知道按下电源按钮可以打开/关闭计算机。 他或她不了解打开和关闭PC电源的PC内部机制。 这就是抽象的全部。
在OOP编程语言中,抽象是通过接口和抽象类实现的。 通过使用接口可以实现100%的抽象。