函数式编程思惟在三行代码情书中的应用

函数式编程概述

现在主流的编程语言,函数式编程范式或多或少都融入其中成了“标配”,或者说主流语言都在进行函数式方面的扩充,这是一个大趋势。以Java为例,随着 Lambda块 和 Stream API 等这种高阶函数的加持,Java总算是装备了函数式这一利器;博大精深的C++也在2011版的语言标准里加入了Lambda块的支持;再好比前一段时间我初步体验了的 Groovy语言,虽然其运行于JVM之上,然而其对 动态语言函数式编程范式 以及 元编程功能 的加持所带来的表现力和简洁性能够说甩了Java几条街,能够利用Groovy的全部动态功能构建高性能的JVM应用、将开发效率提升几个数量级。语言的例子有不少,我不一一枚举。编程

为何要使用函数式编程范式

这里讲几个函数式编程的典型特色,区别的对象那就是传统的命令式编程编程语言

命令式编程 VS 函数式编程

  • 0x01. 更高层次的抽象(高阶函数)

用高阶抽象来取代基本的控制结构自己就是一个全新的思考方式,这样可让开发者聚焦精力于业务场景而无需费心复杂地层运做函数式编程

举个栗子:将一个字符串集合中的全部单词转为大写,咱们用Java语言来实现函数

若是按照传统的命令式编程的解法,那接下来不出意外咱们得来写循环、遍历这种迭代操做了:性能

for (int i=0; i<wordList.size(); i++) {
   wordList.get(i).toUpperCase();
}

但若是使用Java的函数式编程范式,一切都是那么的优雅,一句话搞定spa

wordList.stream.map( w -> w.toUpperCase() )

这里的map()函数就是所谓的高阶函数,咱们用高阶函数代替了底层的迭代,由于咱们并无处理细节,咱们仅仅定义了映射的逻辑,迭代由高阶函数来自动完成!code

  • 0x02. 提高代码信噪比(简洁性)

区别于面向对象语言用抽象来封装不肯定因素,函数式编程经过尽可能减小不肯定因素来使代码极度简洁对象

上面的例子对于本条优势的展示我想应该也没必要多说了blog

  • 0x03. 控制权转交于运行时(动态性)

区别于传统的编译形语言,配备函数式编程范式的动态语言更多的将控制权转交到语言运行时手里,得到的则是更高的灵活性、表现力和性能权衡。开发

这三点优势将在接下来的例子中切实的感觉并领会!

函数式编程例析

举例1:词频统计

作的事情很简单:给定一个单词集合,统计出集合中除了助词(如ofonthe等)以外的单词出现的频次,不区分大小写

命令式解法: 至少分为如下几大步

  • 先进行循环迭代
  • 而后统一将单词转为小写
  • 而后判断单词是不是助词
  • 最后进行词频统计
相关文章
相关标签/搜索