为什么函数式编程很重要:不一样的白板图
2019独角兽企业重金招聘Python工程师标准>>>
为什么我们要学习函数式编程?为获得更好的软件设计技术!
一天,我们设计了一个流程,来校对款项的收支平衡。下面这张图就是我们在几年前设计出的结果:
那以后我们开始学习函数式编程。函数式编程让我们以数据流的方式思考过程处理:数据进来,做变换,过滤,计算,最终的结果就是输出。不仅软件是这样工作的,每段代码,每个函数,都模型化成数据输入,数据输出。中间没有状态的变换。
按这种方式思考问题使我们得到了这样的流程图:
把程序当成数据管道的思考方式使我们关注结果应该是什么,而不是每一步应该如何做。这种更高层次的思考问题的方式使得我们在系统设计阶段避免陷入细节实现的泥潭中。
不管用什么语言写成解决方案,这样的方式思考能让我们获得下面的好处:
* 功能细化。(黄色的框代表JIRA任务)需求在图上已经显得非常明白:输入什么,输出什么。每项任务都能独立的开发。
* 每个字节都可测试。涉及到数据库的代码已经放到了外面;不仅如此,每个方框都完全由输入输出来定义。对于测试来说这是一种最简单的单元组件。
这样一来,函数式的思考方式对敏捷编程(任务分解),TDD,和程序的可维护性都有好处。代码变的模块化。问题变得更容易分析,因为我们能够知道每一步骤数据的样子。
相互独立,易于测试的组件:这就是函数式的。
新的编程技巧是有趣,但新的画白板的技术却是一件大事。
[本文英文原文链接:Why Functional Matters: Your white board will never be the same ]
转载于:https://my.oschina.net/dochong/blog/70955
为什么函数式编程很重要:不一样的白板图相关推荐
- 函数式编程很难,这正是你要学习它的原因
很奇怪不是,很少有人每天都使用函数式编程语言.如果你用Scala,Haskell,Erlang,F#或某个Lisp方言来编程,很可能没有公司会花钱聘你.这个行业里的绝大部分人都是使用像Python,R ...
- 函数式编程语言python-Python函数式编程
在 Python 中使用函数式编程的最佳实践! 简 介 Python 是一种功能丰富的高级编程语言.它有通用的标准库,支持多种编程语言范式,还有许多内部的透明度.如果你愿意,还可以查看 Python ...
- Scala 中的函数式编程基础(一)
主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...
- 我眼中的JavaScript函数式编程
JavaScript 函数式编程是一个存在了很久的话题,但似乎从 2016 年开始,它变得越来越火热.这可能是因为 ES6 语法对于函数式编程更为友好,也可能是因为诸如 RxJS (ReactiveX ...
- Scala 中的函数式编程基础
主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. ...
- Python函数式编程指南
http://www.cnblogs.com/huxi/archive/2011/06/18/2084316.html 1. 函数式编程概述 1.1. 什么是函数式编程? 函数式编程使用一系列的函数解 ...
- 【Java10】lambda表达式(函数式编程),Stream流,File类,字节/字符流,乱码,缓冲/转换/序列化/打印流,Properties
文章目录 1.lambda表达式标准语法:()->{} 2.lambda表达式简略语法:可推导即可省略 3.lambda表达式原理:lambda效率比匿名内部类高 4.两个函数式接口:Consu ...
- Python函数式编程指南(一):概述
这大概算是Python最难啃的一块骨头吧.在我Python生涯的这一年里,我遇到了一些Pythoner,他们毫无例外地完全不会使用函数式编程(有些人喜欢称为Pythonic),比如,从来不会传递函数, ...
- 在 Python 中使用函数式编程的最佳实践!
在函数式编程中,如何使用 Python 编写出优秀的代码? 作者 | Amandine Lee 译者 | 弯月 责编 | 屠敏 出品 | CSDN(ID:CSDNNews) 简介 Python 是一种 ...
最新文章
- 一个很好的性能监测工具dstat
- PMP读书笔记(第13章)
- kido机器人用流量吗_国脉电信200元天网卡,交1700流量无线用,拉人加入还会有不错的收益,你信吗?反正我是不信!...
- jdbctemplate 开启事务_浅入浅出 Spring 事务传播实现原理
- python TCP通信,主从服务设计(通过json进行数据通信)
- 08 Django组件-Forms组件
- POJ 2135 Farm Tour
- vue写数字翻牌效果_封装vue版数字翻牌器
- 基于springboot的物流管理系统设计与实现 JAVA MYSQL
- java中json转对象_Java开发中json使用,各对象与json相互转换
- nrf52832(nrf52810)之硬件I2C(TWI)驱动BMI160
- php缩图代码是什么,php生成缩略图的类代码
- 蒸汽流量计算软件_网上难得学到的知识!涡街流量计选型设计有诀窍
- 网联到智能,上汽要靠R汽车打赢新一轮“卡位战”
- 2023程序员今年的一些现状
- 关于禁止html缓存
- 退出telnet 命令
- 解决ping得通IP 但是ping 不通域名的问题
- 鹊华秋色(2009-06-10)
- 高考如何改变30位互联网大佬的人生?张一鸣,黄峥,蒋凡,马化腾...
热门文章
- SK-Learn使用NMF(非负矩阵分解)和LDA(隐含狄利克雷分布)进行话题抽取
- JS中NaN、null、Undefined区别
- struts2 零配置
- flex textinput 输入限制(数字、字母)
- MFC与OpenCv中的图片转换实例
- oracle 物理表,【查询Oracle表实际物理使用大小】
- 如何将计算机专业知识和水文结合,2016水文勘测理论知识及参考答案 B卷
- placeholder如何实现换行
- python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?
- python刷题总结_【python刷题】差分数组