为什么函数式编程很重要:不一样的白板图

为什么我们要学习函数式编程?为获得更好的软件设计技术!

一天,我们设计了一个流程,来校对款项的收支平衡。下面这张图就是我们在几年前设计出的结果:

命令式编程

那以后我们开始学习函数式编程。函数式编程让我们以数据流的方式思考过程处理:数据进来,做变换,过滤,计算,最终的结果就是输出。不仅软件是这样工作的,每段代码,每个函数,都模型化成数据输入,数据输出。中间没有状态的变换。

按这种方式思考问题使我们得到了这样的流程图:

函数式编程

把程序当成数据管道的思考方式使我们关注结果应该是什么,而不是每一步应该如何做。这种更高层次的思考问题的方式使得我们在系统设计阶段避免陷入细节实现的泥潭中。

不管用什么语言写成解决方案,这样的方式思考能让我们获得下面的好处:

* 功能细化。(黄色的框代表JIRA任务)需求在图上已经显得非常明白:输入什么,输出什么。每项任务都能独立的开发。

* 每个字节都可测试。涉及到数据库的代码已经放到了外面;不仅如此,每个方框都完全由输入输出来定义。对于测试来说这是一种最简单的单元组件。

这样一来,函数式的思考方式对敏捷编程(任务分解),TDD,和程序的可维护性都有好处。代码变的模块化。问题变得更容易分析,因为我们能够知道每一步骤数据的样子。

相互独立,易于测试的组件:这就是函数式的。

新的编程技巧是有趣,但新的画白板的技术却是一件大事。

[英文原文:Why Functional Matters: Your white board will never be the same ]
分享这篇文章:

7 Responses to 为什么函数式编程很重要:不一样的白板图

  1. paladin_t says:

    我更看重FP作为元语言的能力。

  2. acgmohu says:

    哦,之前我都没这么想过。
    只考虑输入输出,类似于linux的管道的想法还真不错。
    现在写东西,还是习惯画流程图。直接将流程转化为代码。

    嗯,很不错的想法,值得一试。

  3. xwsoul says:

    不要诱惑我学习FP了…我都决定果断放弃了的 T______T

  4. dcyw888 says:

    雄鹰影视站,更新最快最好看的影视世界_www.dcyw888.com

  5. 刘华 says:

    难道我是无师自通!
    深感于C语言开发逻辑复杂的,相互共享信息,资源,状态等等等等非常复杂的应用时噩梦般的函数调用,状态同步,检查。我把所有的数据传递,函数调用实现为消息的形式,每一个功能,每一个模块都是一个独立的个体,遵守严格的交互协议,做起来清楚严谨多了。

  6. Yonghang Jiang says:

    对状态转移图深恶痛绝。所以我写了一个能自定义很多状态的基类,一般只用3个状态:正常、出错、结束。一切工作都在正常状态下函数式完成。

  7. aaa says:

    任务原来最的真实面貌,就是在这种小白无所顾忌的重新解释中模糊的。最终就是代码的效率低下、结构复杂、体型臃肿。真正来自任务的复杂度从来不会凭空消失,你把它转移了、平摊了,只是暂时舒服了。这种暂时舒服只能欺骗你,让你自我感觉良好的继续下去,直到崩塌的那一天。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.