有人能简单解释OOP环境中的方法与函数吗?
当前回答
根据我的理解,方法是可以在类上执行的任何操作。它是编程中使用的通用术语。
在许多语言中,方法由函数和子程序表示。大多数语言用于这些的主要区别是,函数可能会返回一个值给调用者,而子程序可能不会。然而,许多现代语言只有函数,但这些函数可以选择不返回任何值。
例如,假设你想描述一只猫,你希望它能够打哈欠。您将使用Yawn方法创建一个Cat类,这很可能是一个没有任何返回值的函数。
其他回答
函数是一个数学概念。例如:
f(x,y) = sin(x) + cos(y)
表示函数f()将返回第一个参数的sin加上第二个参数的余弦。这只是数学。碰巧sin()和cos()也是函数。函数有另一个属性:对具有相同参数的函数的所有调用都应返回相同的结果。
另一方面,方法是与面向对象语言中的对象相关的函数。它有一个隐式参数:被作用的对象(及其状态)。
因此,如果对象Z具有方法g(x),则可能会看到以下内容:
Z.g(x) = sin(x) + cos(Z.y)
在这种情况下,传入参数x,与前面的函数示例相同。然而,cos()的参数是位于对象Z内部的值。Z和位于对象Z内的数据(Z.y)是Z的g()方法的隐式参数。
在OO世界中,这两个词通常用来表示同一件事。
从纯数学和CS的角度来看,当使用相同的参数(f(x,y)=(x+y))调用函数时,函数将始终返回相同的结果。另一方面,方法通常与类的实例相关联。尽管如此,大多数现代OO语言在很大程度上不再使用术语“函数”。许多静态方法可以很像函数,因为它们通常没有状态(不总是真的)。
函数是执行特定任务的一组指令或过程。它可以用来将代码分割成易于理解的部分,这些部分也可以被调用或重用。
方法是可以对对象执行的操作。它也称为存储为对象财产的函数。
主要区别:函数不需要任何对象并且是独立的,而方法是一个函数,它与任何对象链接。
//firstName() is the function
function firstName(){
cosole.log('John');
}
firstName() //Invoked without any object
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
};
//person.name is the method
person.name = function() {
return this.firstName + " " + this.lastName;
};
document.getElementById("demo").innerHTML =
"My father is " + person.name() //performs action on object;
“method”是“function”的面向对象词。这几乎就是它的全部(即,没有真正的区别)。
不幸的是,我认为这里的很多答案都在延续或推进一种观点,即存在一些复杂而有意义的差异。
真的-没有那么多,只是对同一件事用不同的词。
[后期添加]
事实上,正如BrianNeal在对这个问题的评论中指出的那样,C++标准在引用成员函数时从不使用“方法”一词。有些人可能认为这表明C++并不是真正的面向对象语言;然而,我更倾向于将其作为一种迹象,即一群相当聪明的人并不认为有特别强烈的理由使用不同的术语。
使用C#术语,函数和方法之间有区别。术语“函数成员”不仅包括方法,还包括其他非数据成员,如索引器、运算符、构造函数、析构函数和财产,所有成员都包含可执行代码。
reference=>专业C#和.NET 2021版-由Christina Nagel编写