我见过两种一般类型的方法,其目标是返回一组值。第一个是最明显的:
public double[] getArray() {
...
return ...;
}
但是,我也看到了填充作为参数传递的数组的方法,例如AffineTransform.getMatrix()
:
public void getMatrix(double[] flatmatrix) {
...
flatmatrix[0] = ...;
....
}
每种方法的优缺点是什么,哪种情况更可取?另外,使用第二种方法背后的逻辑是什么,而不仅仅是使用第一种方法?
答案 0 :(得分:1)
第一种方法是更好的做法。第二种方法意味着你可以“改变”参数flatmatrix,因此不能确定该矩阵是什么。现在,如果这是所需的行为(改变数组),那么第二个更合适。
我倾向于不改变参数,太容易出错。
答案 1 :(得分:1)
有两种意见。
如果你返回一个数组 - 你必须创建一个新数组,因此你会花更多的内存。
如果将数组传递给方法 - 可以节省内存并提高性能(由于垃圾收集)。但它也违反了Pure Function规则。
对我来说,修改输入参数,特别是数组是一种非常糟糕的做法。避免它的最好方法是将这个逻辑封装到另一个类中。
有一些关于它的信息性问题:
答案 2 :(得分:1)
矩阵方法更喜欢修改数组的原因是它们经常用于图形和绘制调用。这些编写方式允许重用数组。
最好不要在正在调用的绘图例程中导致分配,每秒60次。当发生这种情况时,它会导致更频繁的垃圾收集,这可能会触发暂停,用户可以看到一些丢帧。
就个人而言,除非出于性能原因,否则我不会复制第二种技术。
如果我决定重用并改变一个对象,我会通过该对象上的方法(OO样式)而不是修改输入的过程样式方法来实现。 e.g。
public class Matrix {
public void setFromTransform(AffineTransform transform){
}
}
答案 3 :(得分:0)
返回数组是一个好习惯,这会增加更好的解耦。
传递数组的好处:
传递数组的缺点:
返回数组的优点: