最近看了gitbook上面一本函数式编程的书。忽然间对函数式编程有了更加深刻的理解。并且前一阵子使用HRFrame第二版开发公司的项目的时候遇到一些本质性的问题。其实早就想开发第三版本了。可是无奈没有什么新的思路,所以第三版的开发迟迟没有开始。并且我以为HRFrame从初版到第二版只能说是更加简洁,核心思想并无什么变化,若是再写一版,我我的是以为没有什么意义。违背了我当初开发HRFrame的初衷。看过了书,有了对编程新的认识,第三版的开发工做正式开始。javascript
个人朋友都知道我是javascript,函数式脑,emacs“脑残粉”,在公司中多年前就推崇你们编写函数式代码。奈何当时水平不够,函数式究竟是啥都不知道,只是隐隐以为函数式代码量少,可读性高。关注了几年,找了好多相关资料去学习,感受如今终于入门了。那么为何要使用函数式编程。我举一个例子来讲明这个问题。html
{data:[ {id:1,name:'张三',birthday:'1984-01-04'}, {id:1,name:'张三',birthday:'1984-01-04'}, {id:1,name:'张三',birthday:'1984-01-04'}, ...... ]}
此时,若是咱们要在前端显示用户的年龄,大概代码会这样编写。前端
var dateNow = new Date(); for(var i=0;i<data.length;i++){ var date1 = new Date(data[i].birthday); data[i].age=dateNow.getYear()-date1.getYear(); } //实例代码你们不要纠结是否能正常执行
以上的代码是我随着写这篇文章随手写出来的。我想说的并非代码写的怎么样,而是要分析一下写这些代码的时候个人脑子在想什么。咱们阅读的时候是顺序阅读的。所以从上到下,我看到了以下的重点。java
ok,我看到了所有的重点,多年的编程经验告诉我,这是处理数组,遍历每个元素,取出生日,计算年龄。 首先我先敲一个for循环,固然还有for in更合适。而后我知道我能够取出每个元素及生日,我要作的是用今年的年份减去生日的年份,ok我打开chrome的调试窗口,测试了一下计算方法。如图python
ok了,我知道了如何使用Date对象进行年龄的计算,如今我把这些实验性质的代码放回到循环中。功能就算完成了。 好吧,这里要注意了,编写代码的时候,咱们的大脑是什么样的顺序在输出代码?git
发现了么,咱们提取重点的顺序和大脑生产代码的顺序是反着的。OMG。这说明什么问题?咱们编码时须要记住全部的重点之后才能顺利写出来代码,就像作高考语文题同样,咱们看了文章,文章最末尾问,本文的中心思想是什么?因而咱们又从头读一遍,归纳一下,写出来。并且这种题目我是很不会作的。golang
所以,咱们从当初学编程的时候,老师就告诉咱们,注释是多么重要,必定要写注释。由于注释实际上就是对代码重点的描述。ajax
var dateNow = new Date();//获取当前时间 for(var i=0;i<data.length;i++){//遍历用户数据 var date1 = new Date(data[i].birthday);//转换生日成为时间对象 data[i].age=dateNow.getYear()-date1.getYear();//当前年份-生日年份=年龄 }
这个例子还只是很基本很简单的例子,若是再加上UI,ajax更加实际的状况。这些代码写完了大概三个小时之后绝对会忘记里面一些关键的代码是如何执行的。chrome
所以,不少人学不会编程,以为写代码很累。真的很累,这仍是写没有架构的代码,若是再加上设计,各类工厂,抽象类。项目后期客户需求一变更,OMG...头发....编程
说道这里,是否是函数式编程就是解决这些问题的银弹呢? no,no,no. 我只是在抱怨开发过程当中坑是怎么产生的,我才无论怎么解决这些问题呢。从c语言开始,到java,.Net到python,ruby到golang等等编程语言都在试图解决这些问题。coding less,make more~
我喜欢解决方案的是,把老虎关在笼子里。 哪里产生bug,哪里产生不清晰,就把哪里封装起来。这一点,不管是函数式编程仍是命令式编程,不管面向过程仍是面向对象,全部编程风格都在诉说这个事情。那么为何要学习函数式编程? 很简单的缘由,解决问题的手段不嫌多啊~多一种手段,多一个视角。
javascirpt是最好的编程语言。没有之一。
未完待续...
我看的那本书: https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/ch1.html (出于对本书做者及译者尊敬,担忧本身才疏学浅误人子弟,文章中不少例子直接采用书中的例子。)