一般来说,在编程语言中,我们都会听到 函数 或 过程 的概念。然而,我刚刚发现我几乎将这些术语互换使用(可能是非常错误的)。
那么我的问题是:
就它们的功能、目的和用法而言,它们有什么区别?请举个例子。
如果能提供一个例子就更好了。
一般来说,在编程语言中,我们都会听到 函数 或 过程 的概念。然而,我刚刚发现我几乎将这些术语互换使用(可能是非常错误的)。
那么我的问题是:
就它们的功能、目的和用法而言,它们有什么区别?请举个例子。
如果能提供一个例子就更好了。
一个函数会返回一个值,而一个过程只会执行命令。
“函数”这个名称源于数学,在输入的基础上计算出一个值。
过程是一组可按顺序执行的命令。
在大多数编程语言中,即使函数也可以有一组命令。因此,二者的区别在于是否返回一个值。
但如果您希望保持函数的简洁性(只需看看函数式语言),您需要确保函数没有副作用。
函数可以在SQL语句中使用,而存储过程不能在SQL语句中使用。
插入、更新和创建语句不能包含在函数中,但是存储过程可以有这些语句。
存储过程支持事务,但是函数不支持事务。
函数必须返回一个且仅一个值(另一个可以通过OUT变量返回),但是存储过程返回多个数据集和返回值。
函数和存储过程的执行计划都被缓存,因此两种情况下的性能相同。
//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.");
}
// The following is pseudo code:
g(x) = {
if (morning()) {
g = 2 * x;
}
else {
g = x;
}
return g;
}
// 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
的机器,该机器接收(水果、牛奶、面粉、鸡蛋、糖、热量)
等成分,然后返回一个馅饼
。
该机器的表示可能如下:
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
这个类比还可以,但是当你考虑到当你处理计算机程序时,一切都是抽象的。因此,与向机器提供食谱的情况不同,我们正在比较两个本身就是抽象的东西;两个几乎可以视为同一件事情。我认为它们(在所有意图和目的上)是相同的。
过程: 1.过程是定义参数化计算的语句集合。 2.过程无法返回值。
3.函数无法从函数中调用。
函数: 1.函数在结构上类似于过程,但在语义上建模于数学函数。 2.它可以返回值。 3.过程可以从函数中调用。
过程和函数都是子程序,它们之间的唯一区别在于过程返回多个(或至少可以)值,而函数只能返回一个值(这就是为什么数学中使用函数符号,因为通常在给定时间只找到一个值),尽管一些编程语言不遵循这些规则,但这是它们真正的定义。
(define (sqrt x) (newtons-method (lambda (y) (- (square y) x)) 1.0))
。 - mk12