简单的问题,但是我经常听到这三个术语以如此凶猛的态度定义,但这些年来我已经知道这是不同的事情。

“过程”,“方法”,“函数”,“子例程”等的“正确”定义是什么?

有帮助吗?

解决方案

我在这里有一个不同的答案:实际上说, 真的没有区别, ,略有例外,“方法” 通常 指的是与OO语言中对象关联的子例程。

术语“过程,函数,子例程,子程序和方法”确实含义相同:较大程序中的可召唤子程序。但是,很难提出一个定义,该定义捕获了这些术语的所有变体用法,因为它们在编程语言或范式上并不始终如一地使用。

您可能会说函数返回值。好吧,以下C函数不会返回值:

void f() { return; }

...但是我怀疑您会发现任何人称其为程序。

当然,在Pascal中,过程不返回值和函数返回值,但这仅仅反映了Pascal的设计方式。在Fortran中,一个函数返回一个值,子例程返回多个值。然而,这些都不能使我们能为这些术语提出一个“通用”定义。

实际上,“程序编程”一词是指所有类别的语言,包括C,Fortran和Pascal,其中只有一种实际使用“过程”一词来表示任何内容。

因此,这些都不是一致的。唯一的例外可能是“方法”,它似乎几乎完全与OO语言一起使用,指的是与对象关联的函数。虽然,即使这并不总是一致的。例如,C ++通常使用术语“成员函数”而不是方法(即使术语“方法”已蔓延到程序员之间的c ++白话中。)

关键是,这些都不是一致的。它只是反映了当时流行的任何语言所采用的术语。

其他提示

一个 功能 返回一个值,但是 程序 才不是。

一个 方法 与功能相似,但是 内部 课程的一部分。期限 方法 几乎仅在面向对象的编程中使用。

一个 功能 是需要一堆输入并返回一个或多个值的东西。如果返回的值完全由输入确定,并且该函数没有任何副作用(也许是日志记录,或者导致状态自身外部变化),则称为纯函数。

一个 程序 是一个不返回值的函数。特别是,这意味着程序只能引起副作用。 (这可能包括突变输入参数!)

一个 方法 是关闭一组变量的函数,即 关闭. 。它需要零或更多输入参数,可以访问此一组变量,并返回零或更多值。在OO语言中,这些方法附在对象或类上。

在大多数主流OO语言中,这些封闭变量称为对象的成员字段或实例变量。方法可以是纯函数,不纯净的函数或过程。

后一个定义导致 对象= struct +关闭 一致。

布鲁斯有一个 好答案. 。我会说:

  • 一个过程应对参数“做某事”或引起其他副作用(例如 printf)
  • 函数应(a)回答有关参数的问题,或(b)根据参数计算新值
  • 函数方法应回答有关对象状态的问题
  • 程序方法应更改对象的状态

上面的详细答案;简短的故事是,它们都将成为子例程的风味。每个术语的含义会根据编程语言上下文而有所不同

通常,函数返回一个值,但它们不必

方法是通用的OOP术语 现在

在SQL中,存储过程具有输出,但通常仅返回错误代码,而用户定义的函数必须返回值(这可能是结果集)

同样,这些术语之间的确切差异取决于您正在与谁交谈!

80%的熟练程度与对命名法的熟悉直接相关,

尽管用来描述它的术语,但生产率的95%是识别目前有用的功能

我几乎更喜欢将它们称为C#中的所有方法,除了我使用MSSQL时回来的所有方法,但是现在我们使用Postgres,它们被称为函数。

许可以下: CC-BY-SA归因
scroll top