Functional programming 是一种方法吗;纯粹的;如果它调用作为参数给定的指定回调

Functional programming 是一种方法吗;纯粹的;如果它调用作为参数给定的指定回调,functional-programming,terminology,Functional Programming,Terminology,例如,PureFoo(onSuccess:()=>{DoSomething();})(C#中的示例) 如果Purefoo调用成功的onSuccess,它是否仍算作纯(没有“副作用”?或者这个方法仅仅是“诚实的”(比如不隐藏它所做的) 我在谷歌上搜索过,但没有得到相关的结果。所以,长话短说,这听起来像是否定的 如果有副作用,无论来自哪个来源,都不应该/不能称之为纯副作用 然而,我想,通过将副作用限制在所有清晰明确的预期回调(sorta要求基于返回值的可选return+调用),仍然可以更诚实地说。

例如,
PureFoo(onSuccess:()=>{DoSomething();})(C#中的示例)

如果
Purefoo
调用成功的
onSuccess
,它是否仍算作纯(没有“副作用”?或者这个方法仅仅是“诚实的”(比如不隐藏它所做的)


我在谷歌上搜索过,但没有得到相关的结果。

所以,长话短说,这听起来像是否定的

如果有副作用,无论来自哪个来源,都不应该/不能称之为纯副作用

然而,我想,通过将副作用限制在所有清晰明确的预期回调(sorta要求基于返回值的可选return+调用),仍然可以更诚实地说。
请注意,您无法确保仅在预期的情况下调用回调以及预期的调用次数等。

在这种特殊情况下,
onSuccess
有一个名称和一个签名(返回void/unit),表示有意的副作用。如果您的函数对
onSuccess()
调用的结果没有做任何处理,那么就没有任何可能传递到那里的东西会使外部调用变得纯粹。

为了澄清,您是否在问,如果调用非纯函数,函数是否仍然是纯的?@calculuswiz Yes,如中所示“如果它这样做了,它仍然被认为是纯洁的吗“不幸的是,C#没有强制执行纯洁性。还是应该避免/技术上不可调用/限定为纯函数。请参见上的这个问题。因为C#没有纯函数作为概念,如果您认为可以的话,有什么不同的说法吗?@LasseV.Karlsen对我来说有点重要,因为我希望它能强制执行它,并且在可能产生更干净/更健壮的代码时我会遵守它。等等……那么……如果
onSuccess
接受参数,或者仅仅是如果它返回了一些东西,它会改变什么吗?也不确定你的最后一句话。纯度是关于函数是如何实现的。它与呼叫站点无关。我的意思是,如果您实现了
PureFoo
,那么定义
onSuccess
的方式就不能用纯粹的方式调用它。一个不带参数且不返回任何内容的函数除了被调用以产生副作用之外,没有其他可能的用途。