代码之家  ›  专栏  ›  技术社区  ›  Bill Karwin

没有副作用的确定性函数的术语?

  •  5
  • Bill Karwin  · 技术社区  · 17 年前

    我需要一个特定类型的函数的适当术语。

    假设您在SQL数据库中编写了一个函数,其输入和输出包含在数据库事务的范围内。

    REPEATABLE READ 即使其他客户端正在数据库中进行更改,您也应该得到相同的结果。

    同样,除了在相同的事务范围内,该函数没有副作用。不允许在数据库事务范围之外更改状态。该函数不应发送电子邮件,也不应写入文件系统,也不应在中存储值 memcached ,等等。如果函数更改了数据库中的数据,这没关系,因为如果回滚调用事务,那么函数的效果也会受到影响。

    函数的参数是可以的,因为它们基本上被用作常量。

    这类函数的合适术语是什么?“确定性”似乎还不够具体。你如何描述这类函数?


    谢谢你的回答,但没有一个是我想要的。幂等式最接近,所以我把它标记为可接受的答案。但不管怎样,你们每个人都得到了我的支持票。

    • 纯函数

    • 幂等函数 可以根据数据的状态返回结果,并且给定相同的数据状态,结果总是相同的。但这并不完全符合我的想法;无论函数被调用多少次,幂等函数的效果都必须产生不变的结果。但在事务隔离内所做的更改和在该范围外所做的更改之间没有区别。

    4 回复  |  直到 17 年前
        1
  •  6
  •   RossFabricant    17 年前

    你也可以称之为 pure functions .

        2
  •  5
  •   S.Lott    17 年前

    你是在问什么 idempotent ?

        3
  •  1
  •   MarkusQ    17 年前

    直到第四段,我一直认为它只是一个纯函数,事务是一个隐式参数。但当你说:

    除了在同一事务范围内,该函数没有任何副作用。不允许在数据库事务范围之外更改状态。

    我不太确定。你的意思是它可以改变吗 在内部 交易,但在未来的通话中不知道它们?你如何将其与:

    如果在具有可重复读取隔离的单个事务中调用函数两次,则应得到相同的结果

    换句话说,您是否将事务内的副作用限制为在多次执行时具有相同效果的分配(例如将标志设置为true)?

        4
  •  1
  •   Community Mohan Dere    6 年前

    这里有两个不同的概念,因此您可能需要将多个术语组合在一起,因为没有一个形容词来描述“红色圆形房子”。

    >不允许在数据库事务范围之外更改状态。

    >

    只有“数据库范围”和“会话范围”。函数并没有“事务范围”的概念。函数可以在事务内部或外部使用 那个 事务,但从函数的角度来看,没有区别。

    在函数看来,“事务范围”是 确切地 “数据库范围”。未提交事务中的内容不应提交,因为这适用于所有事务,所以以下内容没有什么特别之处:

    如果在具有可重复读取隔离的单个事务中调用该函数两次,则即使其他客户端正在数据库中进行更改,也会得到相同的结果。

    因为它描述的是事务,而不是函数。我们可以放心地忽略任何与“交易”有关的描述。

    >它可以查询数据库表,但不能从文件系统读取文件,也不能ping网站等。

    >数据库范围之外的状态更改 交易 这是不允许的。该函数不应发送电子邮件,也不应写入文件系统,也不应在中存储值 memcached 等

    >如果函数更改了数据库中的数据,那没关系 .

    > 交易

    最接近的术语可能是“数据库本地”。

    > 除了 交易

    也就是说 有 副作用。

    >我心目中的数据库函数可以基于数据的状态,该函数也可以影响数据的状态。

    最接近的术语是“非无效”,或 “可能有状态” .

    因此,结论是“一个db局部非零函数”。

    推荐文章