Java 代码的正确性

Correctness of Java code

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

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

我打电话给:

matrix[posX][getRealPosY()] = 1;

这对你来说舒适干净吗??我知道我的方法 return 我是一个 Int 但是......我不知道为什么......调用这样的方法对我来说似乎 "weird" 。我只是想学习正确的写法....

我也会写:

int y = getRealPosY();
matrix[posX][y] = 1;

但是像这样访问变量好像没用。

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

realPosY = getRealPosY();
matrix[posX][realPosY] = 1;

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

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

矩阵是一个二维数组。数组的数组。很明显getRealPosY()returns是一个int,方法是int类型的。

使用此代码,您指出这是对变量的无用访问.. 对。除非你觉得它更容易阅读,否则它对你有用。有时,如果代码即使对于专业人士来说也更容易阅读,那么即使不那么简洁,它也有用处。

int y = getRealPosY();
matrix[posX][y] = 1;

你举例

realPosY = getRealPosY();
matrix[posX][realPosY] = 1;

好吧,是的,如果它是 public static int realPosY,那即使得到您可以说 getRealPosY(); 而不是 realPosY=getRealPosY() 的值也是毫无意义的; (自从我做 java 以来已经有一段时间了,但我确定它接受像过程一样调用函数)

这似乎也是一个有趣的设计模式(你称之为 "weird"),让一个函数(returning 一个值)也在它之外设置一个变量。人们通常会选择一个函数来成为(我认识的一位讲师所说的)'constructive' 而不是 'destructive' 即 return 一个新值而不是改变现有值。

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

我认为

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

很糟糕,因为它不仅仅是获取一些值,它还具有改变全局变量值的副作用 realPosY。这在您自己的小程序中没问题,但如果您与其他人一起工作(或在大型代码库上),那么它会使代码更难调试和维护。

"normal"解决方案大概是calculateRealPosY()一种方法,就是设置全局变量,然后直接使用全局变量(我们不会打开关于为什么有全局变量的can-o-worms首先 ;-)

如果它确实让你的调用代码更简单,那么 calculateRealPosY() 可以 return realPosY 的新值 - 它仍然有点模糊,但它比完全隐藏要好得多getter!

中的副作用