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!
中的副作用
我的问题是关于编写漂亮干净的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!