在过去的近十年的时间里,面向对象编程大行其道。以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象。孰不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数十年的历史。那么,接下来,就让我们回顾这个古老又现代的编程模型,让我们看看究竟是什么魔力将这个概念,将这个古老的概念,在21世纪的今天再次拉入了我们的视野。

头条推荐

函数式编程初探

诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。 不仅最古老的函数式语言 Lisp 重获青春,而且新的函数式语言层出不穷,比如 Erlang、clojure、Scala,、F#等等。目前最当红的 Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来越多的迹象表明,函数式编程已经不再是学术界的最爱,开始大踏步地在业界投入实用。……>>详细

函数式编程扫盲篇

在过去的近十年的时间里,面向对象编程大行其道。以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象。

孰不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数十年的历史。

那么,接下来,就让我们回顾这个古老又现代的编程模型,让我们看看究竟是什么魔力将这个概念,将这个古老的概念,在21世纪的今天再次拉入了我们的视野。

1. 什么是函数式编程

阅读全文

函数式思维:为什么函数式编程越来越受关注

到目前为止,在本系列的每期文章中,我都说明了为什么理解函数式编程非常重要。但是,有些原因是在多期文章中进行说明的,只有在综合思路的更大背景中,才可以完全了解这些原因。在本期文章中,我会探讨函数式编程方兴未艾的所有原因,并综合前几期文章中的一些个人经验教训。

在计算机科学短短的发展历史中,技术的主流有时会产生分支,包括实用分支和学术分支。20 世纪 90 年代的 4GL(第四代语言)是一个实用分支,而函数式编程是来自学术界的一个示例。每隔一段时间,都会有一些分支加入主流,函数式编程目前也是这种情况。函数式语言不仅在 JVM 上刚刚崭露头脚(其中两个最有趣的新语言是 Scala 和 Clojure),在 .NET 平台上也是才开始得到应用,在 .NET 平台上,F# 是头等公民。为什么所有平台都如此欢迎函数式编程?答案是,随着时间的推移,随着运行时都要能够处理更多的繁忙工作,开发人员已经能够将日常任务的更多控制权割让给它们。

割让控制权

在 20 世纪 80 年代初,在我上大学的时候,我们使用一个被称为 Pecan Pascal 的开发环境。其独特的特性是,相同的 Pascal 代码可以在 Apple II 或 IBM PC 上运行。Pecan 工程师使用某个称为 “字节码” 的神秘东西实现了这一壮举。开发人员将 Pascal 代码编译为 “字节码”,它可以在每个平台本地编写的 “虚拟机” 上运行。这是一个可怕的体验!所生成的代码慢得让人痛苦,甚至简单的类赋值也非常缓慢。当时的硬件还没有准备好迎接这个挑战。

阅读全文

函数式编程思想:耦合和组合

面向对象编程通过封装变动部分把代码变成易懂的,函数式编程则是通过最小化变动部分来把代码变成易懂的。——Michael Feathers,Working with Legacy Code一书的作者

每天都以某种特定的抽象来进行编码工作,这种抽象会逐渐渗透到你的大脑中,影响到你解决问题的方式。这一文章系列的目标之一是说明如何以一种函数方式看待典型的问题。就本文和下一篇文章来说,我通过重构和随之带来的抽象影响来解决代码的重用问题。

面向对象的目标之一是使封装和状态操作更加容易,因此,其抽象倾向于使用状态来解决常见的问题,而这意味会用到多个类和交互——这就是前面引述Michael Feathers的话中所说的“变动部分”。函数式编程尝试通过把各部分组合在一起而不是把结构耦合在一起来最小化变动的部分,这是一个微妙的概念,对于其经验主要体现在面向对象语言方面的开发者来说,不太容易体会到。

经由结构的代码重用

阅读全文

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

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

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

命令式编程

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

阅读全文

投    票

关于函数式编程你是什么态度?
很熟悉,现在就在用
只是听说过,没有用过,没打算尝试
只是听说,愿意尝试
没听说过

专题推荐

...不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数十年的历史。那么,接下来,
古老又现代的函数式编程
...不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数...
实际开发过程中,有很多时间浪费在启动服务器、调试、重复工作上。如何提高开发效率?优化应用提高启动速度
等待中:加速Java应用开发速
实际开发过程中,有很多时间浪费在启动服务器、调试、重复工作上。如何提高开发...
Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者
Java并发框架剖析--Disrupto
Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JM...
可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让程序用尽可能少的资源完成预
Java 代码性能优化
可供程序利用的资源(内存、CPU时间、网络带宽等)是有限的,优化的目的就是让...

一周排行

留言评论