Java代码的正确性



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

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

and I call:

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

这对你来说又好又干净吗?我知道我的方法返回一个Int但是…我不知道为什么....对我来说,这样调用一个方法似乎很"奇怪"。我只是想学习正确的方法来写这个....

我也可以写:

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

但是像这样似乎对变量有一个无用的访问。

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

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

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

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

在我看来

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

是不好的,因为它不只是获得一些值,它有改变全局变量realPosY值的副作用。这在你自己的小程序中是可以的,但是如果你和其他人一起工作(或者在一个大的代码库中),那么它会使代码更难调试和维护。

"正常"的解决方案可能是一个calculateRealPosY()方法,只是设置全局,然后直接使用全局(我们不会打开can-o-蠕虫为什么你有全局放在首位;-)

如果它确实使你的调用代码更容易,那么calculateRealPosY()可以返回realPosY的新值——它仍然有点模棱两可,但它比getter中完全隐藏的副作用要好得多!

Matrix是一个二维数组。数组的数组。显然,getRealPosY()返回一个int,该方法是int类型的。

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

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

你给的例子是

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

如果它是public static int realPosY,获取值是没有意义的你可以直接说getRealPosY();而不是realPosY=getRealPosY();(已经有一段时间了,因为我做java,但我确信它接受调用函数像一个过程)

这似乎也是一个有趣的设计模式(你称之为"怪异"),让一个函数(返回一个值)也在它的外部设置一个变量。通常人们选择一个函数是为了(我认识的一位讲师这样称呼)"建设性的"而不是"破坏性的",即返回一个新值而不是改变现有值。

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

相关内容

  • 没有找到相关文章

最新更新