2011-03-17 89 views
2

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

回答

1

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

在Pascal语言家族中,区别是显式的,函数返回一个值,程序不会。每种情况下都使用不同的关键字进行定义。 Visual Basic还与函数和子例程(?)区分开来。

既然我们在谈论Objective-C,还有一些问题会让你困惑。与类或对象相关的函数被称为“方法”(分别是类方法和实例方法)。另外,如果我们正在迂腐,你不调用Objective-C方法,你可以通过向对象发送消息来调用它们。区别实际上非常重要,因为消息名称(又名“选择器”)不一定总是指向相同的方法,它可以在运行时更改。这与Java和C++等语言根本不同,其中特定类的特定方法名称实际上仅仅是构成方法主体的代码块地址的符号名称。

2

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

Read more at Suite101:程序,子程序或函数?:编程术语101 - 查看程序,子程序和函数在方法和定义上的差异。 http://www.suite101.com/content/procedure--subroutine-or-function--a8208#ixzz1GqkE7HjE

+3

除此之外,关于对象,我们经常使用术语“方法”。 – JeremyP 2011-03-17 10:06:17

1

根据编程语言的不同,区别可能不那么清楚。让我们采取保守的语言,帕斯卡尔

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

Ç爪哇不区分语法,所以返回类型void的函数可以被认为是一个过程。 斯卡拉区分他们之间的方法头和方法体之间的等号

一般,无论实际的语言如何调用它的结构,我们将理想预计

  • 一个function接受参数,不修改任何状态(如变异参数,全局变量,或将用户的信息打印到控制台),并返回计算结果。
  • A procedure需要参数,执行可能产生副作用的操作(写入数据库,打印到控制台,可能会突变变量),但希望不会改变任何参数。

但实际上,根据情况,可以观察到这些期望的混合。坚持这些准则有助于我思考。

相关问题