当前位置: 首页 > 面试题库 >

数据库和函数式编程是否不一致?

轩辕风华
2023-03-14
问题内容

我已经从事Web开发已有一段时间了,最​​近开始学习一些函数式html" target="_blank">编程。像其他人一样,我在将许多这些概念应用于我的专业工作时遇到了很大的麻烦。对我来说,主要原因是我看到FP保持无状态的目标之间存在矛盾,这与我所做的大多数Web开发工作都与数据库紧密相关,而数据库是非常以数据为中心的。

使我成为OOP方面更具生产力的开发人员的一件事是发现了对象关系映射器,例如用于.Net的MyGeneration d00dads,用于perl的Class
::
DBI,用于ruby的ActiveRecord等。这使我远离了从整天编写插入和选择语句开始,并专注于轻松地将数据作为对象来使用。当然,当需要SQL查询时,我仍然可以编写它们,但是在其他情况下,它却被很好地抽象了。

现在,转向函数式编程,对于许多FP
Web框架(如Links)来说,似乎需要编写许多样板sql代码,如本例所示。Weblocks似乎更好一些,但是它似乎使用了一种OOP模型来处理数据,并且仍然需要为数据库中的每个表手动编写代码,如本例所示。我想您使用了一些代码生成来编写这些映射函数,但这似乎绝对不像lisp。

(请注意,我并未非常仔细地查看Weblocks或Links,可能只是误解了它们的用法)。

所以问题是,对于Web应用程序的数据库访问部分(我认为这是相当大的),或者对于其他需要与sql数据库进行接口的开发,我们似乎被迫遵循以下路径之一:

  1. 不要使用函数式编程
  2. 以一种烦人,轻松的方式访问数据,其中涉及手动编写许多SQL或类似SQL的代码ala链接
  3. 将我们的函数式语言强制为伪OOP范式,从而消除了真正的函数式编程的某些优雅和稳定性。

显然,这些选择都不是理想的。是否找到了规避这些问题的方法?这里真的有一个问题吗?

注意:我个人最熟悉FP方面的LISP,因此,如果您要提供任何示例并了解多种FP语言,则Lisp可能是首选语言


问题答案:

首先,我不会说CLOS(通用Lisp对象系统)是“ pseudo-OO”。这是一流的OO。

第二,我相信您应该使用适合您需求的范例。

当函数是数据流并且确实不需要状态时,就不能无状态地存储数据。

如果您混合了几种需求,请混合使用您的范例。不要限制自己仅使用工具箱的右下角。



 类似资料:
  • 本章主题 ♦ 什么是函数 ♦ 调用函数 ♦ 创建函数 ♦ 条件表达式 ♦ 传入函数 ♦ 形参 ♦ 变长参数 ♦ 函数式编程 ♦ 变量的作用域 ♦ 递归 ♦ 生成器 在第2章,我们引入了函数,并介绍了函数的创建和调用。这一章,我们将在前面内容的基础上,详细的讲解函数的方方面面。除了预期特性之外,Python中的函数还支持多种调用方式以及参数类型并实现了一些函数式编程接口。最后我们将以对Python变

  • 函数式编程 -> 函数响应式编程 现在大家已经了解我们是如何运用函数式编程来操作序列的。其实我们可以把这种操作序列的方式再升华一下。例如,你可以把一个按钮的点击事件看作是一个序列: // 假设用户在进入页面到离开页面期间,总共点击按钮 3 次 // 按钮点击序列 let taps: Array<Void> = [(), (), ()] // 每次点击后弹出提示框 taps.forEach {

  • Python 提供了一个 functools 的模块,该模块为高阶函数提供支持,partial 就是其中的一个函数,该函数的形式如下: functools.partial(func[,*args][, **kwargs]) 这里先举个例子,看看它是怎么用的。 假设有如下函数: def multiply(x, y): return x * y 现在,我们想返回某个数的双倍,即: >>> mu

  • 函数式编程(functional programming)是一种编程范式(Programming paradigm),或者说编程模式,比如我们常见的过程式编程是一种编程范式,面向对象编程又是另一种编程范式。 函数式编程的一大特性就是:可以把函数当成变量来使用,比如将函数赋值给其他变量、把函数作为参数传递给其他函数、函数的返回值也可以是一个函数等等。 Python 不是纯函数式编程语言,但它对函数式

  • 函数式编程 面向值(value-oriented )编程有很多优势,特别是用在与函数式编程结构相结合。这种风格强调值的转换(译注:由一个不变的值生成另一个不变的值)而非状态的改变,生成的代码是指称透明的(referentially transparent),提供了更强的不变型(invariants),因此容易实现。Case类(也被翻译为样本类),模式匹配,解构绑定(destructuring bi

  • ​函数式编程是一种声明式编程。 First-class function 纯函数 高阶函数