【问题标题】:Setting a variable in a return statement [duplicate]在返回语句中设置变量[重复]
【发布时间】:2018-05-23 22:21:11
【问题描述】:

在这个video中,我看到程序员在静态方法中使用了这种形式的return语句:

public static int staticFunc(int x, int y) {
    return x = y;
}

(这不是确切的功能,可以在视频中的10:11找到)

为什么使用 this(在 return 语句中分配一个变量)而不是简单地返回 x?而这种说法叫什么名字?

附加上下文: 该视频是关于用java制作游戏的,视频中的方法是在游戏对象中指定的,以允许玩家对象仅在窗口范围内移动。此函数用于更新播放器对象中的属性。

【问题讨论】:

  • 免责声明:我知道以前很可能有人问过这样的问题,但是它并没有以我正在寻找的方式出现,因此希望我们可以将其路由到现有答案
  • 这只是返回 y。这是一个愚蠢的例子。
  • int x 是一个按值调用的参数。所以在return之前赋值是没有效果的。

标签: java return


【解决方案1】:

....[W]这种说法叫什么名字?

“愚蠢”、“令人沮丧”、“业余”,或者我个人最喜欢的:“不必要的”。

没有理由做代码作者正在做的事情。唯一会发生的事情是您将返回y,这引发了为什么该方法首先存在的问题。

有种有效的情况是您希望在特定上下文中使用赋值运算符 - 即if you wanted to use a throwaway variable to process something for you,但在这种情况下,什么都没有从中受益,除了给其他阅读代码的人带来很多困惑。

虽然我不能对视频讲话,但我建议 - 如果您需要这样的声明 - 使用 Function 代替进行转换,如果有必要的话。

【讨论】:

    【解决方案2】:

    我没有充分的理由想这样写,特别是因为 Java 是按值调用的,即,将输入分配给函数体内的新内容不会更改超出范围的变量函数。

    这让我觉得那个视频中的人只是对这个事实了解不足。

    在其他情况下,赋值表达式的结果是分配给变量的值,因此您可以执行以下操作

    String someName = "Tom";
    System.out.println(someName = "John");
    

    它会将 John 打印到控制台,并将“John”分配给 someName。

    但就您的功能而言,没有充分的理由按照视频中介绍的方式进行操作。

    【讨论】:

      猜你喜欢
      • 2018-01-08
      • 2022-01-05
      • 2018-06-27
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-01
      • 2013-03-12
      相关资源
      最近更新 更多