可能重复:
“功能”和“程序”有什么区别?
我在网上搜索了这个问题的答案,得到的答案是函数可以返回值、修改值等,而子程序不能。但我对这种解释并不满意,在我看来,差异应该不仅仅是术语问题。
所以我正在为这个问题寻找一个更具概念性的答案。
可能重复:
“功能”和“程序”有什么区别?
我在网上搜索了这个问题的答案,得到的答案是函数可以返回值、修改值等,而子程序不能。但我对这种解释并不满意,在我看来,差异应该不仅仅是术语问题。
所以我正在为这个问题寻找一个更具概念性的答案。
函数反映了函数的数学定义,它是从一个或多个输入到一个值的映射。1
子例程是具有明确入口点和出口点的任何代码块的通用术语。
但是,这些术语的确切含义会因上下文而异。
编程语言中函数的一般定义是一段代码,它接受零个或多个输入值并返回零个或一个输出值。
最常见的子程序定义是一个不返回任何内容且通常不接受任何内容的函数。它只是一段有名字的代码。
实际上,在大多数语言中,函数的声明方式并没有什么不同。所以子程序可以称为函数,但函数不一定可以称为子程序。
还有一些人认为函数和子程序是同一个东西,但名称不同。
作为@Oli 答案的补充,值得注意的是,在数学意义上,一个函数必须是“定义明确的”,也就是说,它的输出是由它的输入唯一确定的,而编程语言通常不是这种情况。
那些确实做出这种保证(以及它们的函数不会引起副作用)的语言被称为纯函数式语言,其中一个例子是 Haskell。它们的优点(除其他外)其功能可证明其行为正确,如果功能依赖于外部状态和/或具有副作用,这通常是不可能的。
函数必须返回某个值,并且不得更改全局变量或在函数体之外声明的变量。在这种情况下,一个函数只能模仿它的数学对应部分(将一个数学对象映射到另一个数学对象的东西)
子例程不返回任何内容,并且通常是不纯的,因为它必须更改某些全局状态或变量,否则调用它毫无意义。子程序没有数学上的平行。