《Clojure编程乐趣》—— 第1章,第1.3节函数式编程

简介:

本节书摘来自异步社区《Clojure编程乐趣》一书中的第1章,第1.3节函数式编程,作者 【美】Michael Fogus , Chris Houser,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.3 函数式编程
Clojure编程乐趣
快点回答,函数式编程是什么意思?错!
别太泄气,其实,我们也不知道确切的答案是什么。函数式编程只是诸多定义模糊的计算机术语1中的一个。如果找100个程序员问它的定义,我们会得到100个不同的答案。确实,某些答案是类似的,但如同雪花一般,没有两个答案是完全一样的。要进一步搅混水的话,让计算机科学的专家们单独给出定义,我们可能会发现,某些答案甚至是彼此矛盾的。同样,任何一个函数式编程定义的基本结构都可能会不同,这完全取决于回答问题的人喜欢用哪种语言写程序:Haskell、ML、Factor、Unlambda、Ruby、Qi等。随便一个人、一本书或是一门语言怎么就能声称自己是函数式编程的权威呢?然而,正如大多数各具特色的雪花都是由水组成的,各种说法的函数式编程核心都遵循着同样的核心原则。

1.3.1 一个可行的函数式编程定义
无论函数式编程定义用的是lambda演算、单子I/O(monadic I/O)、delegate还是java.lang. Runnable,基本的单元可能就是某种形式的过程、函数或是方法—这是根本。函数式编程关心和处理的是函数的应用和组合。再进一步,一门被认为是函数式的语言,它的函数概念一定是一等的。在这门语言里,函数可以存储、可以传递,还可以返回,同语言里的其他数据一样。各种不同的定义远远超出了这一核心概念,但是,谢天谢地,作为起点,这足够了。当然,我们还会进一步阐述一下Clojure风格的函数式编程,包括纯粹性、不变性、递归、惰性和引用透明等主题,不过,这些东西稍后会在第7章讨论。

1.3.2 函数式编程的内涵
一般说来,面向对象程序员和函数式程序员看到问题和解决问题的方式有所不同。面向对象思维模式采用的方式是,把应用领域定义成一组名词(类),函数式思维模式则会把解决方案视为各种动词及其组合(函数)。虽然二者产生的结果可能是一样的,但函数式解决方案会在简洁、可理解、可重用方面更胜一筹。确实如此!希望在本书结束时你也会认同,函数式编程会让程序设计更为优雅。这是一种思维模式的转换,从考虑名词,到思考动词,但这个旅程物有所值。无论如何,我们都相信,Clojure会让你获益良多,反哺到你选择的语言中—唯有打开心胸,方能体会这一点。

1快点回答,组合子(combinator)的定义是什么?云计算呢?企业级呢?SOA呢?Web 2.0呢?真实世界呢?黑客呢?通常,追求有唯一准确定义这件事无异于缘木求鱼。

相关文章
|
23天前
|
JavaScript 前端开发 Scala
谈一谈你理解的函数式编程?
谈一谈你理解的函数式编程?
11 0
|
设计模式 算法 程序员
【译】需要学习的是编程,而不是编程语言
我们不仅是程序员,而且是个(与时俱进的)学习者。鲜见的是有多少人认为他们是在学习编程的呢。
|
Shell BI 测试技术
Haskell 编程入门
在过去的几个月里,学习Haskell让我觉得非常快乐,但是入门的过程并没有我原先想象的那么简单。我非常幸运地在一个正确的地方工作,并且因此能够在Facebook参加Bryan O'Sullivan的Haskell课程。在Try Haskell上玩了一段时间后,最终你就会想要在自己的电脑上安装GHC了。
173 0
Haskell 编程入门
|
JavaScript 前端开发 Java
准备充分了嘛就想学函数式编程?(第五部分)
本文讲的是准备充分了嘛就想学函数式编程?(第五部分),迈出理解函数式编程概念的第一步是最重要的,有时也是最难的一步。但是不一定特别难。只要选对了思考方法就不难。
1278 0
|
JavaScript 前端开发
准备充分了嘛就想学函数式编程?(第四部分)
本文讲的是准备充分了嘛就想学函数式编程?(第四部分),想要理解函数式编程,第一步总是最重要,也是最困难的。但是只要有了正确的思维,其实也不是太难。
1026 0