【问题标题】:Java's methods vs. functions [duplicate]Java的方法与函数[重复]
【发布时间】:2013-04-19 20:46:56
【问题描述】:

我刚刚决定将我的 MATLAB 编程技能与一些更加一致和严格的 Java 编码相结合。因此,我希望这不是一个太天真的问题。

我想知道 Java 将函数称为 methods 而不是 functions 的任何真正原因,就像许多其他程序语言那样。

是因为与C/C++ 等过程语言相比,Java 内部的OOP 的性质?还是有其他重要(或微妙)的原因?

提前致谢。

【问题讨论】:

  • 方法是类范围内的类中的函数...
  • 坦率地说,我对“欺骗”中接受的答案中包含的定义并不满意;它仍然归结为定义问题,并且该定义取决于上下文。底线是“因为 Java 就是这么称呼它们的”。
  • @DaveNewton 正确拼写错误 tnks!
  • 如果您要定义语言,您可以随意称呼它。可以称为方法、函数、过程、例程等。从技术上讲,(数学)函数没有副作用,因此数学上倾向于回避该术语(除非例程确实需要没有副作用)。
  • function = 静态方法(类范围方法),没有副作用。与可能改变对象字段的非静态方法相反。正是因为尊重干净的“功能”,才引入了一个新名称“方法”。

标签: java function methods


【解决方案1】:

它们是一样的。 C++ 通常称它们为函数。 Java 通常将它们称为方法。

方法通常与一个类相关联。

你偶尔也会听到“类函数”,它只是一种方法。

没关系,如果你打电话给他们,人们就会知道你在说什么。

【讨论】:

  • 这不是真的,即使我们认为这是一回事。方法用于对象,函数独立于对象。
  • 您显然在编程世界中的时间不长。早在 Java 之前,我们将方法称为“类函数”。不要拘泥于语义。
  • 看这篇文章(Aaron 回答)。 stackoverflow.com/questions/155609/…
  • 我认为真正的交易是函数返回一个值,过程不返回一个值,而方法只是 java 为带有隐式参数 (this) 的函数/过程说话。
  • @CaptainSkyhawk 我认为在讨论有关语义的问题时挂断语义是合理的。
【解决方案2】:

好吧,方法和函数之间有一点区别。

函数只是一个代码,您可以随时通过其名称调用它,您可以将参数也称为参数传递给它,您还可以从任何函数获取结果,即函数的返回值。

但是,方法是一种通过名称调用但与任何对象相关联的代码。您也可以将参数传递给方法,也可以从方法中获取一些返回值,但问题是它们将始终与 一些对象 相关联。

已编辑

Java 是面向对象的,在大多数情况下你不能让 Java 代码在没有类的情况下运行,但是在 C++ 中你可以让你的代码在没有类的情况下运行。所以在 Java 中会有类,代码会写在类中,所以它们被称为方法而不是函数,因为它们将与对象相关联。

但在 C++ 中,您可以拥有一些可以通过显式传递值来调用的函数。

简单来说,方法就是与对象相关的函数。

【讨论】:

  • Java 是真正面向对象的 我不会这么说。 Java有静态方法(实际上每个Java程序的入口点都是一个静态方法),它们属于类,但不属于对象。 Java 是一种可以(并且应该)以面向对象的方式使用的命令式过程语言,但它绝不是一种纯粹的 OO 语言
  • @SeanPatrickFloyd 我没有称它为纯粹的 OO,我称它为真的。也很糟糕吗?你怎么能说Java是过程语言?有什么资料可以阅读这本书吗?
  • 它是一种 OO 语言,可能会以非 OO 的方式被误用(没有什么能阻止你编写一个数千行长的主方法而没有一个对象分配)。如果这符合您对真正 OO 的定义,我们的定义会有所不同
  • @SeanPatrickFloyd 那么就 OO 而言,我们应该怎样称呼 Java?部分?
  • 嗯,这可能太苛刻了。我会为 Perl 或 JavaScript 等语言保留它,其中 OO 基本上是一个附加组件。 “大多”?或者只是“面向对象”,没有修饰符。
【解决方案3】:

在我看来这个数字http://www.jot.fm/issues/issue_2008_03/article4/images/figure2.gif

来自http://www.jot.fm/issues/issue_2008_03/article4/ 有助于理解 OO 和过程编程之间的主要区别之一。 基本上这个想法是

过程式编程只提供一个维度来关联一个 有名字的计算单元。在这里,过程调用或名称 直接映射到过程实现。在图一调用 m1别无选择,只能调用唯一的实现 程序m1

同时

面向对象编程为名称解析增加了另一个维度 到程序化编程。除了方法或 过程名称,消息派发将消息接收者带入 查找方法时的考虑。在图 2b 中,我们看到两个 方法 m1 的实现。选择合适的方法 不仅取决于消息名称 m1,还取决于消息的接收者 实际的消息,这里是 Ry

图(c)的第三部分涉及面向主体的编程,其中对象(被调用的方法)的行为不仅取决于对象状态,还取决于正在调用(或观察)它。但是,这实际上超出了您的问题范围。

【讨论】:

    【解决方案4】:

    不禁想到这一部有很多不必要的戏剧性。 “方法”肯定只是 Java 碰巧使用的一个名称,用于可能需要也可能不需要参数并且可能返回值也可能不返回值的子例程?

    例如有效的“方法”可能如下,而不涉及 OO 纯度、“函数”的规范定义等;以下两者在执行过程中可能会或可能不会使用对象的当前“状态”(实例变量值):

    // kind of a function, returns a value
    public int calculateStuff(int param1)
    
    // more of a procedure, presumably just "does stuff", returns nothing
    public void doStuff(int param1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-15
      • 2020-02-16
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2020-10-10
      相关资源
      最近更新 更多