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

我的问题是:

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

请举例说明。


当前回答

一般来说,程序是一系列指令。 函数可以是相同的,但它通常返回一个结果。

其他回答

在程序内部我们可以使用DML(插入/更新/删除)语句,但在函数内部我们不能使用DML语句。

过程可以同时有输入/输出参数,但函数只能有输入参数。

在存储过程中可以使用Try-Catch块,但在函数中不能使用Try-Catch块。

在选择语句中不能使用存储过程,但在函数中可以使用。

存储过程可以返回0或n个值(最多1024个),但函数只能返回1个必须的值。

存储过程不能从函数调用,但可以从存储过程调用函数。

在存储过程中可以使用事务,但在函数中不能使用事务。

我们不能在Where/Having/select部分的Sql语句中使用存储过程,但可以使用in函数。

我们不能连接存储过程,但可以连接函数。

更多. .点击这里…http://dotnet-developers-cafe.blogspot.in/2013/08/difference-between-stored-procedure-and.html

一般来说,程序是一系列指令。 函数可以是相同的,但它通常返回一个结果。

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

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

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

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

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

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

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

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

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

更严格地说,如果x = y,函数f遵守f(x) = f(y)的性质,即每次使用相同的参数调用它时,它都会计算相同的结果(因此它不会改变系统的状态)。

因此,rand()或print("Hello")等不是函数,而是过程。 而sqrt(2.0)应该是一个函数:无论调用多少次,都没有可观察到的效果或状态变化,它总是返回1.41或其他。