译文
函数式编程最近重新成为了编程社区的热点话题。部分原因是由于函数式编程的固有属性完美的解决了现在工业界面临的多核问题。这是函数式编程的一个重大应用,但是这绝对仅仅是你需要了解函数式编程的唯一理由。
掌握函数式编程,可以让你在其他领域中极大的提高你的代码质量。如果你真正的了解函数式编程范式,你的设计绝对会体现出更好的“引用透明性”。
引用透明性是一个非常诱人的性质。它要求无论函数在何时何处调用,它都在相同的输入下持续的产生相同的输出。这就是,函数调用时,返回值对可变状态的依赖依赖非常少,理想情况下,完全不依赖。
在实际开发中,导致这种缺陷的原因是由于变量的出现。每个读这篇文章的人,可能都有这种经历:为什么在特定情况下某些输入并没有产生需要的输出?可视化机制也许可以管理这些隐藏的问题。或者至少将这些问题定位到一部分代码中。但是,如果无节制的引入变量,它确实会导致这种问题的出现。
我们并不能得到产业界在这方面的认同。引入面向对象的设计就已经支持了上面说的那种糟糕设计。因为经常有人画出一张图,图中几个对象高高兴兴的相互调用,并且这几个对象的内部状态一直在变化,这肯定是危险的。但是,使用敏捷的测试驱动设计,特别是确信”Mock Roles, not Objects”时,不必要的变量便可以不被设计引入。
最根本的结果就是,使用许许多多的小函数,并通过函数传参数的设计,会比引用大量的变量更具有责任感。这样做产生的缺陷更少,更进一步说,也更容易调试。因为这么做,很容易便可以发现诡异的变量是从那个阶段引入的,而不是像传统编程那样,需要依赖特定的上下文这个错误的结果才会出现。这种设计需要高度的引用透明性。并且可能没有什么比你学习一种函数式编程语言更能让你深入骨髓的体会这中特性的好处了。因为函数式编程语言的计算模型是规范的。
当然,这种事件也并不是适用于任何系统的。例如,在OO系统中,这种设计原则可能更适用于领域模型开发(也就是,使用各种服务的协作来降低业务的复杂度),而不是用户界面。
掌握一种函数式编程范式,你就可以审慎而明智的在其他领域中应用到你学习的东西。你的面向对象系统也会学习到引用透明性的好处,并且更像函数式的风格。事实上,很多人甚至认为,极端的函数式编程正好是面向对象编程的对立面,这就像计算机程序界的阴和阳。
想法
-
这篇文章可以说是我学习函数式编程的原因。其实我一直对学习新语言非常抵触,更多的时候用就好了。真正学习过的语言,对我自己而言只有C++。但是,看完这篇文章后,便多了一个erlang。
-
函数式编程确实有很多不同的地方,语法方面倒是其次。我觉得,有人说java是第一门为了让程序员轻松而产生的语言,但是我觉得,函数式编程是真的为了解决程序而产生的语言,而不是简单的对计算机的抽象。
-
在这周的前几天,在libcstl的群里和群里争论并发模型的问题。我是坚持单线程多进程+coroutine,在网页服务器上,绝对比多线程模型优良的多的。比如,node.js的服务器要远比tomcat服务器更适用于现在的网络编程开发。和一个大叔交流的很好,大叔最后说了句话我认为很多。在局部下,多线程模型更为简单和有优势。不过,群里的其他人我就很无语了。随便说说,就扯到“你怎么能不用多线程,全局变量呢?”,“你不用全局变量,多线程怎么写程序?”,“你会不会写程序?”。国人程序员的浮躁和素质可见一斑了。而且动不动就人身攻击这点很无聊。
-
所以,还是混邮件列表吧。
本文翻译,源自项目TranslateTogether。欢迎大家访问我的博客
分享到:
相关推荐
函数式编程是一种编程范式,它强调将计算视为数学函数的评估,并避免可变状态和副作用。这种编程风格鼓励使用纯函数,即那些输入相同输出始终一致且不改变外部状态的函数。函数式编程有着深厚的理论基础,源于λ演算...
2. **应用函数式编程原则(Apply Functional Programming Principles)**:函数式编程是编程范式之一,强调无副作用的函数和不可变数据。Edward Garson、Giles Colborne、Filip van Laenen、Jørn Ølmheim、Rajith ...
本套黑马程序员的Java函数式编程视频教程涵盖了Lambda表达式、Stream流以及函数式编程的核心概念,旨在帮助学习者全面掌握这一现代编程技术。 Lambda表达式是Java 8引入的关键特性,它允许我们以更简洁的方式定义...
《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...
函数式编程(FP)是一种...《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。
函数式编程(Functional Programming,FP)是一种编程范式,它将计算视为数学函数的评估,并避免改变状态和可变数据。在函数式编程中,设计模式有所不同,它们通常基于一组与命令式编程(如面向对象编程,即OO)不同...
《Perl程序员应该知道的事》是一本专门为Perl程序员编写的书籍,内容以食谱形式展开,旨在帮助读者快速掌握Perl编程语言的基础知识,并能将所学知识应用于实际编程中。本书的编写方式并非采用冗长枯燥的说教,而是...
【函数式编程简介】 函数式编程(Functional Programming,FP)是一种编程范式,它强调将计算视为函数的求值过程,而不是通过改变状态或执行控制流来实现。函数式编程起源于数学,尤其是λ演算,它最早由数学家...
C++编程惯用法:高级程序员常用方法和技巧.part2.rar
函数式编程是一种编程范式,它将计算视为数学函数的求值,并强调程序的数据流和变换,而不是对指令进行控制。这种编程风格鼓励使用纯函数,即没有副作用、只依赖于输入参数并返回相同结果的函数。在函数式编程中,...
函数式编程是一种编程范式,它强调通过使用数学函数来构造计算,而不是通过改变状态或控制流程。在函数式编程中,程序被视为一系列不可变的数据转换,而不是指令集。这种编程风格最早可以追溯到20世纪30年代的λ演算...
本资源“ios-简单便捷的函数式编程--view的frame设置.zip”聚焦于如何利用函数式编程的思想来简化iOS应用中视图(View)的frame设置。下面我们将详细探讨这一主题。 首先,让我们了解函数式编程的基本概念。函数式...
《实用函数式编程研讨会》是一场深入探讨函数式编程实践的学术活动,旨在提升开发者对这一编程范式的理解和应用能力。在本次研讨会中,我们将会深入到函数式编程的核心概念,学习如何在实际项目中利用其优势,提高...
map函数接收一个函数和一个列表,将函数应用于列表的每一个元素,并返回一个新列表。fold函数则将一个函数和一个初始值应用到列表的元素上,累积得到一个单一的结果。这两个函数通常联合使用,map负责数据的转换,...
函数式编程是一种编程范式,它强调通过使用数学函数来构造程序,并且避免使用副作用和可变状态。近年来,函数式编程在IT行业中受到了越来越多的关注,这主要得益于它的一些独特优势和现代计算环境的需求。 首先,...
这与数学中的函数概念相似,这也是为什么函数式编程对于构建需要大量计算的应用程序非常有用,因为如果程序知道这一点,它可以优化执行速度。 函数式编程通常使用所谓的高阶函数(Higher-order functions),即那些...
函数式编程语言一向被认为是比其它编程语言更高深的语言。一是因为函数式编程语言的语法很另类,比如Lisp语言,二是因为函数式编程语言都很古老,比如Schema语言。在如今面向对象语言大行其道的时代,函数式编程语言...