术语的具体含义是什么:函数,方法,过程和子例程?


11

我想知道我们用来对相关代码部分进行分组的术语有哪些具体区别。有时我会看到术语可以互换使用:许多OO语言甚至使用关键字“函数”来定义方法。(为什么?)

如果您想精确一点,那么每个的具体含义是什么?还是只是每种语言选择调用它而已?


我知道function用于方法的仅有的两种语言是JavaScript和PHP。两者都对非方法(自由函数)使用相同的关键字,就JavaScript而言,函数和方法之间并没有真正的区别,至少在语言级别上没有区别。

示例:在VB.Net中Sub是一个Function没有返回值的。在其中Python可以有一个不属于任何类的函数,因此它不是方法。您还可以在函数中声明函数,也可以在C#中进行声明。有时由于苹果和菠萝的相同原因,它们具有不同的名称:因为它们是不同的。
工作

到目前为止,您发现了什么,使您认为存在差异?
JeffO

Answers:


20
  • 子程序,子程序
    “子程序”可能来自汇编语言。一些处理器包括支持子例程的指令,以作为组织代码和重用公共代码段的一种方式。例如,6502处理器具有JSR(跳转到子例程)和RTS(从子例程返回)指令。我记得它在结构化编程中也经常使用,其中程序是代码单元的层次结构,有时又称为子例程或子程序。IMO,这些是某些代码单元的最通用术语,为了完成给定任务,控制权会暂时转移到该代码单元。

  • 函数,过程
    这些经常互换使用,但是在某些语言中存在区别。在Pascal中,函数是返回值的子程序,而过程是不返回值的子程序。在C语言和相关语言中,每个子程序都有一个返回类型(即使是void),因此没有区别。

  • 方法,成员函数
    这是同一事物的两个名称-本质上是与给定类或对象关联的函数。

  • 运算符
    每种语言都有一组内置的运算符。在某些语言中,例如C ++,运算符是可以被覆盖(即替换)和/或重载(即为新类型定义)的函数。

  • 匿名函数
    这是指没有名称的函数。匿名函数本质上是代码块,可以将其分配给变量或作为参数传递以供后续使用,例如作为完成例程。

  • 闭包,lambda表达式,块
    闭包是绑定到一组变量的一段代码。我认为闭包是匿名函数加上下文。


4
并非所有语言都带有内置运算符。有些,例如Scheme和Haskell,只允许您使用“ +”或“ >> =”之类的名称定义函数。另外,您可能应该补充一点,在某些语言中(例如Scheme),“功能”意味着参照透明性(例如,对于相同的输入,它总是返回相同的值,而没有副作用),而过程则没有。否则,很好的答案。
Tikhon Jelvis'Dec 12'4

到目前为止,我还记得“运算符”主要用于带有2个参数的函数。它们是中缀(参数之间的运算符:)2 + 2。有一些小的例外,例如1-arg之类的++arg(前缀)或arg++(后缀)。虽然,我还没有看到许多后缀运营商..
DarekNędza

-1

这取决于语言,您可以如何使用它们

  • 你需要区别吗
  • 在谈论代码时,语法有区别吗,还是只是方便?

AFAIK在Basic中,如果您调用某个东西,该东西不返回任何东西,但是执行带有打印,写入文件或更改全局变量等副作用的工作,则称为过程。

如果返回某些内容,则称为函数。

在像Java这样的OOP语言中,我很少遇到“功能”一词,而是“方法”,并且有人教导说功能是全局的,每个人都可以调用。

在函数式和OOP语言的Scala中,方法不称为函数,但是您可以将这样的事情传递给另一个方法,然后它成为函数。

据我所知,子例程是一个例程,该例程被另一个例程调用。

总而言之,我不认为所有语言都有一个简洁的定义,范式更是如此。如果使用这些术语,则必须考虑自己所处的特定文化-也许您应该首先介绍您的定义。


-1

我会说,取决于上下文,所有这些词可能意味着相同的事物或截然不同的事物,例如Caleb编写的内容(但还有更多,例如,运算符是一等函数的语言等)。因此,很难给出具体的定义,并且明智的做法是假设上下文(编程语言)已知,不要承担太多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.