Methods Java代码的正确性

Methods Java代码的正确性,methods,coding-style,correctness,Methods,Coding Style,Correctness,我的问题是如何编写漂亮干净的Java代码。 假设我有这个方法: public static int getRealPosY() { realPosY = (matrix.length -1) - pos.getPosY(); return realPosY; } 我呼吁: matrix[posX][getRealPosY()] = 1; 这对你来说干净漂亮吗??我知道我的方法返回一个Int,但是…我不知道为什么…调用这样的方法对我来说似乎“奇怪”。我只是想学习写这篇文章的正确

我的问题是如何编写漂亮干净的Java代码。 假设我有这个方法:

public static int getRealPosY() {
    realPosY = (matrix.length -1) - pos.getPosY();
    return realPosY;
}
我呼吁:

matrix[posX][getRealPosY()] = 1;
这对你来说干净漂亮吗??我知道我的方法返回一个Int,但是…我不知道为什么…调用这样的方法对我来说似乎“奇怪”。我只是想学习写这篇文章的正确方法

我还可以写:

int y = getRealPosY();
matrix[posX][y] = 1;
但这样似乎对一个变量没有什么用处

或者我可以使用相同的变量“private static int realPosY;”:

但是,同样,使用与get方法完全相同的变量似乎很奇怪


我是Java新手,所以我当然有点困惑。顺便说一句,如果有人想教我,那就太好了。非常感谢。

矩阵是一个2D数组。数组的数组。显然,getRealPosY()返回一个int,该方法的类型为int

通过这段代码,您可以指出,访问变量是无用的。。正确的。除非你觉得它更容易阅读,在这种情况下,它对你是有用的。有时,如果代码即使对专业人士来说也更容易阅读,那么即使它不那么简洁,它也有用处

int y = getRealPosY();
matrix[posX][y] = 1;
你举一个

realPosY = getRealPosY();
matrix[posX][realPosY] = 1;
嗯,是的,如果它是公共静态int realPosY,那么即使得到你可以说的
getRealPosY()的值也是毫无意义的而不是realPosY=getRealPosY();
(我已经有一段时间没有使用java了,但我确信它可以像过程一样调用函数)

这似乎也是一种有趣的设计模式(你称之为“怪异”),一个函数(返回一个值)也在其外部设置了一个变量。通常,人们选择函数是为了(据我所知,一位讲师称之为)“建设性”而不是“破坏性”,即返回新值而不是更改现有值

如果realPosY是在函数中本地声明的或同时声明的,那么函数就不会在外部设置realPosY,那么说realPosY=getrealPosY()就太浪费了,因为realPosY还没有这个值,但是你仍然可以将函数调用放在数组的[]中。

在我看来

public static int getRealPosY() {
    realPosY = (matrix.length -1) - pos.getPosY();
    return realPosY;
}
这是不好的,因为它不仅仅是获取一些值,它还有一个副作用,即更改全局变量
realPosY
的值。这在您自己的小程序中是可以的,但是如果您与其他人(或在大型代码库中)一起工作,那么它会使代码更难调试和维护

“正常”的解决方案可能是一个
calculateralposy()
方法,它只设置全局,然后直接使用全局(我们不会打开can-o-WORM来说明为什么首先要使用全局;-)


如果它确实使调用代码变得更容易,那么
calculateralposy()
可以返回
realPosY
的新值-它仍然有点含糊不清,但比getter中完全隐藏的副作用要好得多

getRealPosY()实际执行计算并设置全局变量是一个“副作用”——我们不喜欢副作用@John3136它看起来是故意的,不是副作用。。你说的副作用是什么意思。他本可以这样做的,所以它只是这样做,不返回值。我认为返回一个值是一种更可取的设计模式,但另一种方法也适用。这里有两种设计模式。方法是“获取一些东西”,而不是“计算一些东西设置一个全局变量然后返回”——在一个小的学习应用程序中当然可以,但在“真实代码”中,这是一种副作用,是调试/维护的痛苦。在这种情况下,更好的解决方案可能是
calculateralposy(){realPosY=(matrix.length-1)-pos.getPosY();}
,直接在代码中使用
realPosY
。@John3136这不是故意的。我在代码中经常使用getRealPosY(),因为我只是需要它。对我来说,创建一个方法(也只是为了计算)来实现这一点看起来更好。对我来说,这比每次计算都要写好得多……你的第二个版本的调用是最好的。最好将索引值之类的内容“公开”,以便在调试时可以看到它们的值。不用担心创建另一个局部变量——它们在Java中是免费的——不需要“花费”任何东西。谢谢!;)。对我来说,你的回答很有用。
public static int getRealPosY() {
    realPosY = (matrix.length -1) - pos.getPosY();
    return realPosY;
}