我有一个疑问 我知道函数和过程之间的主要区别是 函数强制返回一个值,其中过程可能会或可能不会返回值。 但是当我们使用void类型的函数时,它什么都不返回。 请你澄清我的疑问。
答案 0 :(得分:2)
传统上,返回值的过程称为函数(见下文),但是,许多现代语言完全不使用术语过程,而是更喜欢将术语函数用于所有命名的代码块。
在Suite101上阅读更多内容:程序,子程序或功能?:编程术语101 - 查看程序,子程序和函数的方法和定义的差异。 http://www.suite101.com/content/procedure--subroutine-or-function--a8208#ixzz1GqkE7HjE
答案 1 :(得分:1)
根据编程语言的不同,区别可能并不那么明确。我们采用保守的语言, Pascal :
procedure
确实没有返回值。它用于没有返回值或具有多个返回值的操作。在后一种情况下,多个参数(返回参数或输出参数)通过引用传递(使用var
关键字),并且从过程内部直接修改它们的值。 (请注意,根据具体情况,后一种情况可能不被视为良好做法。)function
有一个返回值,通常我们不希望它改变任何参数的值(然后可以通过值或const
关键字传递哪些参数) 。可以通过将它们捆绑到记录中来返回多个返回值。 C 或 Java 不会在语法上区分,因此返回类型void
的函数可以被视为一个过程。 Scala 通过方法头和方法体之间存在等号来区分它们。
一般,无论实际语言如何调用其构造,我们理想期望
function
接受参数,不修改任何状态(如变异参数,全局变量或用户向控制台打印信息),并返回计算结果。procedure
接受参数,执行可能产生副作用的操作(写入数据库,打印到控制台,可能会改变变量),但希望不会改变任何参数。然而,在实践中,根据情况,可以观察到这些期望的混合。坚持这些准则有助于我思考。
答案 2 :(得分:1)
在C及其衍生物中,很少使用术语“程序”。 C具有一些功能,其中一些返回值,而另一些则不返回。我认为这是C的遗产的一个人工制品,在ANSI C中引入void
之前,没有办法不返回一个值。默认情况下,函数返回int
,您可以忽略(仍然可以),如果未指定显式返回值,则可能是一些随机数。
在Pascal语言系列中,差异是显式的,函数返回值而程序则没有。在每种情况下,定义使用不同的关键字。 Visual Basic还可以区分函数和子例程(?)。
由于我们讨论的是Objective-C,因此还有一些问题让您感到困惑。与类或对象关联的函数称为“方法”(分别为类方法和实例方法)。
此外,如果我们是迂腐的,你不会调用Objective-C方法,你可以通过向对象发送消息来调用它们。区别实际上非常重要,因为消息名称(又名“选择器”)不一定总是引用相同的方法,它可以在运行时更改。这与Java和C ++等语言根本不同,其中特定类的特定方法名称实际上只是构成方法主体的代码块地址的符号名称。