2

我有一个疑问,我知道函数和过程之间的主要区别是函数强制返回一个值,而过程可能会或可能不会返回值。但是当我们使用 void 类型的函数时,它什么也不返回。可以请人们澄清我的疑问。

4

3 回答 3

2

传统上,返回值的过程被称为函数(见下文),但是,许多现代语言完全放弃了术语过程,而是更喜欢将术语函数用于所有命名的代码块。

阅读 Suite101 的更多信息:过程、子例程或函数?:编程术语 101 - 了解过程、子例程和函数的方法和定义的差异。http://www.suite101.com/content/procedure--subroutine-or-function--a8208#ixzz1GqkE7HjE

于 2011-03-17T10:02:40.647 回答
1

根据编程语言的不同,区别可能不是很清楚。让我们采用一种保守的语言Pascal

  • procedure确实没有返回值。它用于没有返回值或有多个返回值的操作。在后一种情况下,多个参数(返回参数或输出参数)通过引用(使用var关键字)传递,并且它们的值直接从过程内部修改。(请注意,后一种情况可能不被视为良好做法,具体取决于具体情况)。
  • function有一个返回值,通常我们不希望它改变任何参数的值(然后这些参数可以按值传递,或者通过const关键字传递)。可以通过将多个返回值捆绑到一个记录中来返回多个返回值。

CJava在语法上没有区别,所以返回类型的函数void可以被认为是一个过程。Scala通过方法头和方法体之间的等号来区分它们。

一般来说,无论一种实际的语言如何调用它的构造,我们理想地期望

  • Afunction接受参数,不修改任何状态(如改变参数、全局变量或将用户信息打印到控制台),并返回计算结果。
  • Aprocedure接受参数,执行可能有副作用的操作(写入数据库,打印到控制台,可能会改变变量),但希望不会改变任何参数。

然而,在实践中,根据情况,可以观察到这些期望的混合。我认为坚持这些指导方针会有所帮助。

于 2011-03-17T10:08:00.720 回答
1

在 C 及其派生词中,很少使用术语“过程”。C 有一些函数,其中一些返回值,而另一些则不返回。我认为这是 C 遗产的产物,void在 ANSI C 引入之前,没有办法返回值。默认情况下,函数返回一个int你可以忽略(仍然可以)的值,如果没有明确指定返回值,它可能是一些随机数。

在 Pascal 语言家族中,区别是明确的,函数返回一个值而过程不返回。在每种情况下,定义都使用不同的关键字。Visual Basic 还区分函数和子例程(?)。

由于我们谈论的是Objective-C,因此还有一些进一步的问题会让您感到困惑。与类或对象关联的函数称为“方法”(分别为类方法和实例方法)。

另外,如果我们是迂腐的,你不要调用 Objective-C 方法,你可以通过向对象发送消息来调用它们。区别实际上非常重要,因为消息名称(也称为“选择器”)不一定总是引用相同的方法,它可以在运行时更改。这与 Java 和 C++ 等语言根本不同,在这些语言中,特定类的特定方法名称实际上只是构成方法主体的代码块地址的符号名称。

于 2011-03-17T10:47:32.950 回答