JavaScript函数式编程学习

 

原文地址 http://jiarry.bokee.com/6768082.html 

 

对函数式编程了解较少,这些天看了一些文章,逐渐开始理解。其实以前在用的带有这种风格,只是并没有这么彻底,或者说“o,这就是函数式编程”,比如尽量限制变量的作用域到一个比较小的范围,我们再整个类里面不用到什么变量,全是通过函数来相互调用的。

当然对于这种模式或者概念而言,其实是没有特别的定论的。不过函数式编程的确由来已久,而最近两年才开始慢慢地热了起来。可能,原因是这种适合函数式编程的动态语言开始流行了。看一下函数式编程的介绍,如下:

什么是函数编程?
 
在经常被引用的论文 “Why Functional Programming Matters”(请参阅 参考资料) 中,作者 John Hughes 说明了模块化是成功编程的关键,而函数编程可以极大地改进模块化。在函数编程中,编程人员有一个天然框架用来开发更小的、更简单的和更一般化的模块,然后 将它们组合在一起。函数编程的一些基本特点包括:
支持闭包和高阶函数。
支持懒惰计算(lazy evaluation)。
使用递归作为控制流程的机制。
加强了引用透明性

  • 函数式编程概念,包括匿名函数、调用函数的不同方法,以及将函数作为参数传递给其他函数的方式。函数式编程是一种强调表达式的计算而非命令的执行的一种编程风格。表达式是用函数结合基本值构成的,它类似于用参数调用函数。
  • 函数式概念的运用,采用的示例包括:扩展数组排序;动态 HTML 生成的优美代码;系列函数的应用。

这些,JavaScript刚好符合。而JavaScript程序由于没有统一的包定义或者装载模式,脚本量大了时不太好维护,不够模块化。有时一个函数 块包括上百行代码,这对于代码的维护和可读性会是个问题。虽然,面向对象能有效解决了这一点,但是无形间文件似乎多了,代码似乎也增加了。

JavaScript为什么要使用函数式编程的方式呢?既然JavaScipt通过prototype可以完全实现面向对象,那我们为什么要函数式编程 呢?我想有很重要的一点就是,无论怎么说面向对象的设计把一些东西确实搞复杂了,更臃肿庞大了。这对于大型应用来讲是无可厚非的,但是通常 JavaScript我们用来实现的Web应用并不是企业级的,我们需要简单、高效,同时又维护性强,可复用的代码。

函数式JavaScript编程之所以很重要有三条主要的理由:
   1. 它有助于写出模块化和可复用的代码。不用再看到冗长的函数块了。
   2. 它对事件(event)处理程序非常有效。匿名函数发挥了重要作用。
   3. 它很有趣!。或者说很Cool。

今天抽空利用一些函数式编程写了一个程序,作用是拼接HTML字符串,同时给HTML Element加上函数事件。代码如下:




new document








    函数调用测试,分别给对象绑定事件和函数
   


   


   


    

代码如下:



参考
http://www.ibm.com/developerworks/cn/web/wa-javascript.html 
http://shiningray.cn/functional_javascript_programming.html 
http://www.javaeye.com/topic/101055?page=1 
http://www.infoq.com/cn/news/2008/03/revoerability-and-testing-oo-fp 
http://www.cnblogs.com/RChen/archive/2007/07/24/829755.html 



本次试验主要在函数调用函数以及采用匿名函数挂载事件上,感觉确实有他的好处。采用面向对象实现可能会更复杂,而一般的函数编程会把一个函数搞得很复杂,读起来会比较累。总体感觉是,确实不错的样子。
当然了,在实际开发过程中哦,我还是推崇面向对象的。无论Java、PHP、JavaScript等,面向对象确实让程序变得更简单、更具有复用和可维护 性。但是,毋庸置疑,函数式编程对于OOP将是一个很好的补充。在OOP的大框架里,有时采用一下函数式风格,确实能解决一些问题。 就好象对于事件的处理,如果采用匿名函数来配合,那一切要变得方便的多。

你可能感兴趣的:(JavaScript函数式编程学习)