【发布时间】:2015-07-30 00:52:44
【问题描述】:
我的问题是要编写漂亮干净的 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 的新手,所以我当然有点困惑。顺便说一句,如果有人想教我,那就太好了。非常感谢。
【问题讨论】:
-
getRealPosY() 实际上进行计算并设置全局变量的事实是“副作用”——我们不喜欢副作用!
-
@John3136 看起来是故意的,不是副作用。你说的副作用是什么意思。他本可以这样做,所以它只是这样做并且不返回值。我想返回一个值是一种更受欢迎的设计模式,但另一种方式也可以。它在那里完成了两种设计模式..
-
方法是“获取一些东西”,而不是“计算一些东西设置一个全局变量然后返回它” - 在小型学习应用程序中肯定可以,但在“真实代码”中它是一个副作用和调试/维护很痛苦。在这种情况下,更好的解决方案可能是
calculateRealPosY() { realPosY = (matrix.length -1) - pos.getPosY(); },直接在代码中使用realPosY即可。 -
@John3136 这不仅仅是故意的。我在代码中经常使用 getRealPosY(),因为我只是需要它。对我来说,创建一个方法(也只是用于计算)来做到这一点看起来更好。对我来说,这比每次计算都要写好得多.....
-
您的第二个通话版本是最好的。最好将诸如索引值之类的东西“公开”,这样您就可以在调试时看到它们的值。不要担心创建另一个局部变量——它们在 Java 中实际上是免费的——不要“花费”任何东西。
标签: methods coding-style correctness