有人能简单解释OOP环境中的方法与函数吗?


当前回答

函数是主要属于面向过程编程的概念,其中函数是一个可以处理数据并返回值的实体

方法是面向对象编程的概念,其中方法是类的成员,该类主要对类成员进行处理。

其他回答

方法位于对象上或在类中是静态的。函数独立于任何对象(并且在任何类之外)。

对于Java和C#,只有方法。对于C,只有函数。

对于C++和Python,这取决于您是否在类中。但在基本英语中:

功能:独立功能。方法:做某事的一种方式,它有不同的方法或方法,但与同一方面(也称为类)相关。

函数是主要属于面向过程编程的概念,其中函数是一个可以处理数据并返回值的实体

方法是面向对象编程的概念,其中方法是类的成员,该类主要对类成员进行处理。

一般答案是:

方法具有对象上下文(this或类实例引用),

函数没有上下文(null、全局或静态)。

但问题的答案取决于你们使用的语言术语。

在JavaScript(ES6)中,您可以根据需要自定义函数上下文(this),通常必须链接到(this)对象实例上下文。在Java世界中,你总是听到“只有OOP类/对象,没有函数”,但如果你仔细观察Java中的静态方法,它们实际上是在全局/空上下文(或类的上下文,没有实例化)中,所以只有没有对象的函数。Java老师可以告诉你,函数是C++中C的雏形,在Java中已经过时了,但他们告诉你这是为了简化历史,避免新手提出不必要的问题。如果您在Java 7版本之后看到,您可以发现许多用于简化并行计算的纯函数编程元素(甚至不是来自C,而是来自1988年的Lisp),而且它不是OOP类风格。在C++和D世界中,事情变得更强大,您可以将函数和对象与方法和字段分开。但在实践中,您会再次看到没有this的函数和带有this的方法(带有对象上下文)。在FreePascal/Lazarus和BorlandPascal/Dephi中,函数和对象(变量和字段)的分离项通常与C++类似。Objective-C来自C世界,因此必须使用方法插件将C函数和Objective-C对象分开。C#与Java非常相似,但有许多C++的优点。

函数是一段按名称调用的代码。它可以传递数据以进行操作(即参数),也可以选择返回数据(返回值)。传递给函数的所有数据都是显式传递的。

方法是由与对象关联的名称调用的一段代码。在大多数方面,它与函数相同,但有两个关键区别:

方法隐式传递给调用它的对象。方法能够对包含在类中的数据进行操作(记住对象是类的实例-类是定义,对象是该数据的实例)。

(这是一个简化的解释,忽略了范围等问题)

函数和方法之间主要区别的非常一般的定义:

函数在类外部定义,而方法在类内部和类的一部分定义。