“函数编程”之思

在2019RailsConf大会上,笔者参加了一个名为“函数编程之思”的有趣讲座。

WebRTC Ventures旨在用最佳方案解决用户的问题,所以笔者激动于这个讲座会带来怎样的启发。讲座讨论了两个概念:面向对象和函数式编程。

面向对象编程是一种允许程序员将实物行为转换为计算机可理解的代码样式。此编程中体现了类,对象,继承,封装,抽象和多态等概念。

函数式编程将数据以及在构建应用程序时它将如何变化都加以考虑。许多编程语言都是内置的,为的就是利用这个能够“处理符号计算和列表处理应用程序 ”的范式的优势。

在向观众说明了面向对象和函数式编程适用的不同场景之后,演讲者John Schoeman向大家介绍了一个为客户开发的Web应用程序,开启了一场“魔幻”之旅。

讲座

讲座从创建了一个新的rails web应用程序开始,它支持用户存储并上传CSV文件,省去了手动创建的麻烦。讲到这时,其展示的功能与我们在日常开发中所看到的相差无几。

面向对象和函数式编程的实现方式则大相径庭。首先,我们看到的是面向对象编程的实现方式,如下:

接下来我们看到的是函数编程的实现方式:

正如大家所见,面向对象编程的实现完全与行为有关,而函数编程的功能实现则更多地是关于处理数据的。

如果需求发生变化,比如现在Web应用程序需要允许导入Excel文件。

则面向对象编程的实现形式更改为一名为ProductDataImporter的新类,这其中可放“导入功能”的逻辑。体现在代码中的更改如下所示:

该情况下,导入器控制器如下所示:

函数编程的变化如下:

而read_file函数现在是:

在本次讲座中,很明显所有这些微小变化都是针对特定的数据操作,而不是那些能模拟创建新类及其功能的现实行为的代码变化。

总之,这两种范式各有千秋,无好坏之分。它们的区别根本在于需求将如何发生以及数据在实施过程中如何变化。凑巧的是,Ruby and Rails拥有用户要创建一个面向对象或函数式编程的Web应用程序所需的一切。

原文标题:Thoughts on “Sprinkles of Functional Programming”

作者:Eduardo Reyes

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营