一般来说,我们都听说过编程语言中的函数或过程。然而,我发现我几乎可以互换地使用这些术语(这可能是非常错误的)。

我的问题是:

它们的功能、目的和用途有什么不同?

请举例说明。


当前回答

在db的上下文中: 存储过程是预编译的执行计划,而as函数不是。

其他回答

Function可以在sql语句中使用,而procedure不能在sql语句中使用。

插入、更新和创建语句不能包含在函数中,但过程可以包含这些语句。

过程支持事务,但函数不支持事务。

函数必须返回一个且仅返回一个值(另一个值可以由OUT变量返回),但过程返回尽可能多的数据集和返回值。

函数和过程的执行计划都被缓存,因此在这两种情况下性能是相同的。

如果我们在这里与语言无关,那么过程通常指定了可靠且幂等地实现某个结果所需的一系列行为。也就是说,一个过程基本上就是一个算法。

另一方面,函数是较大程序中某种程度上独立的代码段。换句话说,函数是过程的实现。

在大多数情况下:函数返回一个值,而过程不返回。两者都是组合在一起做相同事情的代码片段。

在函数式编程上下文中(所有函数都返回值),函数是一个抽象对象:

f(x)=(1+x)
g(x)=.5*(2+x/2)

这里,f和g是同一个函数,但是过程不同。

这取决于上下文。

在类pascal语言中,函数和过程是不同的实体,不同之处在于它们是否返回值。他们的行为不同。语言语法(例如;过程调用表单语句;你不能在表达式中使用过程调用,而函数调用不构成语句,你必须在其他语句中使用它们)。因此,pascal培养的程序员会对这两者进行区分。

在类c语言和许多其他当代语言中,这种区别已经不复存在;在静态类型语言中,过程只是带有有趣返回类型的函数。这可能就是为什么它们可以互换使用的原因。

在函数式语言中,通常没有过程这样的东西——所有东西都是函数。

有一个术语子程序或子程序,它代表一段参数化的代码,可以从不同的地方调用。

函数和过程是它们的实现。通常函数返回值,过程不返回任何东西。