一般来说,我们都听说过编程语言中的函数或过程。然而,我发现我几乎可以互换地使用这些术语(这可能是非常错误的)。
我的问题是:
它们的功能、目的和用途有什么不同?
请举例说明。
一般来说,我们都听说过编程语言中的函数或过程。然而,我发现我几乎可以互换地使用这些术语(这可能是非常错误的)。
我的问题是:
它们的功能、目的和用途有什么不同?
请举例说明。
当前回答
在С#/Java中,函数是返回特定值的代码块,而过程是返回void(什么都没有)的代码块。在c# /Java中,函数和过程通常都被称为方法。
//This is a function
public DateTime GetCurrentDate()
{
return DateTime.Now.Date;
}
//This is a procedure(always return void)
public void LogMessage()
{
Console.WriteLine("Just an example message.");
}
其他回答
函数返回值,过程只执行命令。
函数的名称来源于数学。它用于根据输入计算一个值。
过程是一组可以按顺序执行的命令。
在大多数编程语言中,甚至函数也可以有一组命令。因此,差值只是返回一个值。
但是如果你想让函数保持简洁(看看函数式语言就知道了),你需要确保函数没有副作用。
更严格地说,如果x = y,函数f遵守f(x) = f(y)的性质,即每次使用相同的参数调用它时,它都会计算相同的结果(因此它不会改变系统的状态)。
因此,rand()或print("Hello")等不是函数,而是过程。 而sqrt(2.0)应该是一个函数:无论调用多少次,都没有可观察到的效果或状态变化,它总是返回1.41或其他。
我反对在大多数答案中反复看到的东西,函数之所以成为函数,是因为它返回一个值。
函数不是任何返回值的旧方法。事实并非如此:为了让一个方法成为一个实函数,它必须总是在给定特定输入的情况下返回相同的值。不是函数的方法的一个例子是大多数语言中的随机方法,因为尽管它确实返回值,但值并不总是相同的。
因此,函数更类似于映射(例如,对于一维函数,x -> x')。这是常规方法和函数之间的一个非常重要的区别,因为当处理实函数时,它们被求值的时间和顺序应该永远不重要,因为对于非函数并不总是如此。
这是另一个方法的例子,它不是函数,但仍然会返回一个值。
// The following is pseudo code:
g(x) = {
if (morning()) {
g = 2 * x;
}
else {
g = x;
}
return g;
}
我进一步反对过程不返回值的概念。过程只是谈论函数或方法的一种特定方式。这意味着如果你的过程定义或实现的底层方法返回一个值,那么猜猜这个过程返回什么值。以SICP中的以下片段为例:
// We can immediately translate this definition into a recursive procedure
// for computing Fibonacci numbers:
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
您最近听说过递归过程吗?他们在讨论一个递归函数(一个实函数),它返回一个值,他们使用了“过程”这个词。那么,有什么不同呢?
另一种思考函数的方式(除了上面提到的意义)是作为一个理想的抽象表示,如数字1。过程就是那个东西的实际实现。我个人认为它们是可以互换的。
(注意,如果你从我提供的链接中阅读了那一章,你可能会发现更难理解的概念不是函数和过程之间的区别,而是过程和过程之间的区别。你知道递归过程可以有迭代过程吗?)
过程的类似物是配方。例如;假设你有一台叫派的机器,这台机器输入(水果、牛奶、鲜花、鸡蛋、糖、热量)的原料,然后这台机器返回一个派。
这台机器的表示可能是这样的
make-pies (fruit, milk, flower, eggs, sugar, heat) = {
return (heat (add fruit (mix eggs flower milk)))
}
当然,这不是做派的唯一方法。
在这个例子中,我们可以看到:
A function is to a machine
as a procedure is to a recipe
as attributes are to ingredients
as output is to product
这个类比是可以的,但当你考虑到当你在处理一个计算机程序时,一切都是抽象的,它就不成立了。所以不像机器的配方我们比较的是两个本身就是抽象的东西;这两件事很可能是同一件事。我认为它们(出于所有意图和目的)是同一件事。
在程序内部我们可以使用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
一般来说,程序是一系列指令。 函数可以是相同的,但它通常返回一个结果。