关于Java:函数只在非面向对象语言中吗?

Are functions only in non-object-oriented languages?

本问题已经有最佳答案,请猛点这里访问。

我被要求回答这个问题:

Where should I put the Javadoc specific comment notation of /** and */
if I want to tell the user specifics about a certain instance variable
or method?

我的回答是:

Above the function declaration.

答案被拒绝,原因如下:

Functions are in non-object-oriented languages. Method is the proper name.

这是真的吗?


Are functions found only in non-object-oriented languages?

没有。有面向对象的语言有函数。例如,C是一种面向对象的语言,但它有匿名函数。

What are the named procedures which are members of a type typically called in object-oriented languages like Java or C#?

通常,它们被正确地称为方法,尽管不同语言的方法不同。在Java或C语言中,我会说"方法"。

例如,在VisualBasic中,函数和子例程之间的区别是基于它们是否返回值,而不是基于它们是否与类型容器关联。

JavaScript是一种面向对象的语言,它使用原型继承而不是类继承,通常将上述所有内容都称为"函数"。

Do people frequently refer to methods as functions when speaking casually about Java or C#?

对。如果我写文档、书籍或学术文章,那么我会小心区分。一般来说,虽然每个合理熟悉计算机编程艺术的人都会把"函数"和"方法"理解为大致的同义词。我不会拒绝你的回答。


任何限制这一特定语言的回答都是固有的缺陷。此外,还必须有效地处理静态方法和子例程。

计算机科学从术语"子程序"开始。可重复代码的一小部分,可以任意执行以执行公共操作。在早期的编程语言(如BASIC)中可以找到示例。

函数是子程序的演化。它们接受参数,可能返回值,也可能不返回值。他们从数学输入中提取一些概念,并将其翻译成给定的输出。

对于对象,我们需要能够调用对象上的操作,我们这样做就是公开方法。像函数一样,它们接受参数,可能返回值,也可能不返回值。

静态方法被设计为作用于类中所有可能的对象。

问题是,纯面向对象编程没有为函数(或者实际上是子例程)的定义留下任何范围。而进化为面向对象的语言通常保留了从函数到实现方法的语法。

在Java中,我们求助于使用"实用工具"类来提供EDCOX1和3种方法的功能。javascript中的Math类就是另一个例子。

在PHP中,我们允许使用function这个词来定义方法。

在C++中,我们既看到函数和方法,也没有划定。实际上,C++不引用方法,称之为成员函数。


函数未绑定到类。

函数类似于doStuff();

一种方法类似于someThing.doStuff();SomeClass.doStuff();

在爪哇,没有这样的功能。它们都是方法。即

1
2
3
4
5
6
7
8
9
10
11
12
13
    class Test {

        public static void doSomething() {...}
        public void otherThing() {...}

        public static void main(String[] args) {
            doSomething(); //implied Test.doSomething();
        }

        public Test() {
            otherThing(); //implied this.otherThing();
        }
    }