Java代码的正确性

时间:2015-07-30 00:52:45

标签: methods coding-style correctness

我的问题是所有要编写漂亮而干净的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;”:

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

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

我是Java的新手,所以我当然有点困惑。顺便说一句,如果有人想教我这将是伟大的。非常感谢你。

2 个答案:

答案 0 :(得分:1)

在我看来

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

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

“普通”解决方案可能只是一个calculateRealPosY()方法,只设置全局,然后直接使用全局(我们不会打开关于为什么你有全局变量的can-o-worms ; - )

如果确实让您的调用代码变得更容易,那么calculateRealPosY()可以返回realPosY的新值 - 它仍然有点含糊不清,但它比吸气剂中完全隐藏的副作用好很多!

答案 1 :(得分:-1)

Matrix是一个2D数组。一个数组的数组。显然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 = getrealPosY()就好了,因为realPosY赢了'但还是有值,但你仍然可以将函数调用放在数组的[]中。