Iphone 函数和过程之间的区别?

Iphone 函数和过程之间的区别?,iphone,objective-c,function,procedure,Iphone,Objective C,Function,Procedure,我有点怀疑 我知道函数和过程的主要区别是 函数强制返回一个值,其中作为过程可能返回值,也可能不返回值。 但是当我们使用void类型的函数时,它什么也不返回。 请大家澄清我的疑问。传统上,返回值的过程被称为函数(见下文),然而,许多现代语言完全不使用过程一词,而是对所有命名代码块使用函数一词 更多信息,请阅读Suite101:过程、子例程或函数?:编程术语101-查看过程、子例程和函数的方法和定义的差异 根据编程语言的不同,区别可能不太清楚。让我们采取保守的语言, Pascal < /强>: 过

我有点怀疑 我知道函数和过程的主要区别是 函数强制返回一个值,其中作为过程可能返回值,也可能不返回值。 但是当我们使用void类型的函数时,它什么也不返回。
请大家澄清我的疑问。

传统上,返回值的过程被称为函数(见下文),然而,许多现代语言完全不使用过程一词,而是对所有命名代码块使用函数一词


更多信息,请阅读Suite101:过程、子例程或函数?:编程术语101-查看过程、子例程和函数的方法和定义的差异

根据编程语言的不同,区别可能不太清楚。让我们采取保守的语言,<强> Pascal < /强>:

  • 过程
    确实没有返回值。它用于没有返回值或具有多个返回值的操作。在后一种情况下,通过引用(使用
    var
    关键字)传递多个参数(返回参数或输出参数),并从过程内部直接修改它们的值。(注意,后一种情况视情况而定,可能不被视为良好做法)
  • 函数
    只有一个返回值,通常我们不希望它更改任何参数的值(这些参数可以通过值传递,或者通过
    const
    关键字传递)。通过将多个返回值捆绑到一个记录中,可以返回多个返回值
CJava在语法上不区分,因此返回类型
void
的函数可以看作是一个过程Scala通过方法头和方法体之间的等号区分它们

一般来说,无论实际语言如何调用其结构,理想情况下我们都希望

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

然而,在实践中,根据具体情况,可以观察到这些期望的混合。坚持这些准则有助于我的思考。

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

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

因为我们正在讨论Objective-C,所以还有一些问题让您感到困惑。与类或对象关联的函数称为“方法”(分别是类方法和实例方法)


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

除此之外,关于对象,我们经常使用“方法”这个词。