能否简单解释一下在面向对象编程中方法和函数的区别?
据我所知,方法是可以在类上执行的任何操作。它是编程中使用的一个通用术语。
在许多语言中,方法由函数和子例程表示。大多数语言用于区分这些的主要区别是函数可以将值返回给调用者,而子例程则不能。然而,许多现代语言只有函数,但这些函数可以选择不返回任何值。
例如,假设您想描述一只猫,并希望它能打哈欠。您将创建一个Cat类,其中包含一个Yawn方法,这很可能是一个没有返回值的函数。
大致上来说,方法(以C++风格的面向对象编程)是成员函数的另一种称呼,也就是类中的一种函数。
在像C/C++这样的语言中,您可以拥有不属于类的函数;您不能将未与类相关联的函数称为方法。
Function(函数)是主要属于过程式编程的概念,其中函数是一个可以处理数据并返回值的实体。
Method(方法)是面向对象编程中的概念,其中方法是类的成员,主要对类成员进行处理。
我虽然不是专家,但以下是我的一些了解:
"函数"是C语言的术语,它指的是一段代码,"函数名"是用来标识这个函数的标识符。
"方法"是面向对象的术语,通常在函数参数中有一个"this"指针。你不能像C语言那样调用这段代码,你需要使用对象来调用它。
"调用方法"也是不同的。这里的调用意味着找到这段代码的地址。在C/C++中,链接时将使用函数符号来定位。
而Objective-C则不同。调用意味着使用数据结构查找地址的C函数。这意味着在运行时所有内容都是已知的。
TL;DR
函数是要执行的一段代码。方法是对象内部的函数。
函数的示例:
function sum(){
console.log("sum")l
}
一个方法的例子:
const obj = {
a:1,
b:2,
sum(){
}
}
我知道许多其他人已经回答过了,但我发现以下是一个简单而有效的单行答案。虽然它看起来与其他答案差不多,但如果您仔细阅读它,它包含了关于方法与函数的所有必要信息。
方法是具有定义接收方的函数,在面向对象编程中,方法是对象实例上的函数。
函数 - 函数是一段独立的代码,包含一些逻辑,必须独立调用,并且在类之外定义。
方法 - 方法是一段独立的代码,与某个对象相关联并在类内部定义。
一般答案是:
方法
有对象上下文(this,或类实例引用),
函数
没有上下文(null,或全局,或静态)。
但是问题的答案取决于您使用的语言术语。
在 JavaScript (ES 6) 中,你可以自由地定制函数上下文 (this)为任何你想要的内容,这通常必须与(this)对象实例上下文链接。
在 Java 的世界里,你总是会听到"只有OOP类/对象,没有函数", 但如果你仔细观察Java中的静态方法
,它们实际上处于全局/空上下文(或类的上下文,没有实例化),所以只是没有对象的函数。Java老师可能会告诉你,函数是C和C++中的残留物,并在Java中被删除
,但他们之所以这么说是为了简化历史并避免新手不必要的问题。如果你看看Java 7版本之后,你会发现许多纯函数编程元素(甚至不是来自C,而是来自1988年的Lisp)用于简化并行计算,并不是OOP类的风格。
在C++和D的世界里,事情更加强大,你有单独的函数和带有方法和字段的对象。但实际上,你会再次看到没有this的函数和带有对象上下文的方法。
在FreePascal/Lazarus和Borland Pascal/Delphi中,关于函数和对象(变量和字段)的分离术语通常类似于C++。
Objective-C来自C的世界,所以你必须区分C函数和Objective-C对象与方法附加。
C#非常类似于Java,但具有许多C++的优点。
这有点令人困惑,但他说“有时”,所以大致上是有道理的,C++的创建者倾向于将“方法”看作是可以在对象上调用并具有多态行为的函数。虚函数有时被称为方法。
if(class(object)) { ... } else {stop()}
在概念上等同于方法吗? - Konrad