函数式编程实践

Posted shape of code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数式编程实践相关的知识,希望对你有一定的参考价值。

翻不过这座山,他们就听不到我们的故事。

                            ——  恭喜IG夺冠


在JavaScript中的函数式编程

了解了函数式编程的基本概念后,现在让我们来用函数式编程来实现一个小的功能。

在用javascript进行函数式编程时,有三个简单的规则需要注意,这能够让我们更容易实现函数式编程:

1. 保持数据的不可变性

2. 确保尽量使用纯函数,只接收一个参数,返回数据或其他函数

3. 尽量使用递归处理循环


下面我们要实现的功能是一个时间显示器,获取当前的时间,然后以 09:25:30 AM 的形式输出。

为了加深印象,先用我们熟悉的命令式风格来简单地实现一遍这个功能,再用函数式风格来实现一遍。这样能够让我们更好地理解这两种风格的区别和各自的优缺点。


命令式风格编写的显示时钟

首先,我们需要获取当前时间,并且将时间格式化

再将时间显示到控制台

函数式编程实践

最后,每隔一秒执行一次显示的函数

函数式编程实践

命令式风格的代码完成功能很简单,但是每个函数大而复杂,做的事情太多。如果没有注释,很难让人理解,而且也不好维护。下面让我们来看看函数式风格的实现。


函数式风格编写的显示时钟

函数式风格编程,我们的目标是将该应用的业务逻辑分解成更小的部分或函数。每个部分将聚焦于单个任务,然后我们将它们合成更大的函数,以便我们可以创建一个时钟程序。

定义基础的函数

函数式编程实践

用于合成其他函数的函数

函数式编程实践

格式化时间的功能函数

函数式编程实践

下面将之前定义的功能函数进行合成

最后,调用这个函数

最终的输出和命令式版本是一样的,但是这种方法有诸多的好处。首先,所有函数易于测试和复用。它们还可以在将来的时钟程序或者其他其它数字显示程序中复用,而且这个程序非常容易进行功能扩展。它没有副作用,函数外部不存在全局变量。


如果专门从代码行数来看这两种编程风格的代码,函数式风格确实要复杂一些,但是在后期可维护性和可扩展性上,函数式风格则要便利许多。想以后加班越来越少,在时间允许的情况下,还是多用函数式风格来组织你的代码吧 : )


以上是关于函数式编程实践的主要内容,如果未能解决你的问题,请参考以下文章

Swift 函数式编程实践

给 Python 程序员的函数式编程实践经验

函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码

函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码

JDK 8 函数式编程最佳实践

JDK 8 函数式编程最佳实践