这是一种编码风格的问题: -
以下是案例
Dim obj1 as new ClassA
' Some lines of code which does not uses obj1
Something.Pass(obj1) ' Only line we are using obj1
或者我们应该在将对象作为参数传递时直接初始化对象吗?
Something.new(new ClassA())
答案 0 :(得分:7)
如果你只是在该方法调用中使用该对象,那么将“new ClassA()”直接传入调用可能会更好。这样,您就不会有额外的变量,有人可能会在将来错误地尝试使用。
但是,为了便于阅读和调试,创建临时对象并将其传入通常很有用。这样,您可以在调试器中将变量传递给方法之前检查该变量。
答案 1 :(得分:3)
你的问题是“我们应该创造对象”;你的例子都创建了一个对象。
两个例子之间在逻辑上没有任何区别。为对象命名允许在不止一个地方引用它。如果你不是这样做的话,更明确的是不给它一个名字,所以维护代码的人可以立即看到该对象只传递给另一个方法。
答案 2 :(得分:1)
一般来说,我会说不,你正在做什么错误,但听起来好像你的调用函数,被调用函数和临时对象。或许可以进行一些重构。
答案 3 :(得分:1)
我个人更喜欢让事情保持一致,让我的生活更轻松(我认为让我的生活更轻松可能不是你认为让你的生活更轻松的事情......所以你可以用这个建议做什么)。
如果你有这样的事情:
o = new Foo();
i = 7
bar(o, i, new Car());
然后你有一个不一致的地方(两个参数是变量,另一个是动态创建的)。为了保持一致,你要么:
其中只有一个会起作用(第一个!)。
它也有实用的方面:使变量更容易调试。
以下是一些例子:
while(there are still lines in the file)
{
foo(nextLine());
}
如果要显示下一行进行调试,现在需要将其更改为:
while(there are still lines in the file)
{
line = nextLine();
display(line);
foo(line);
}
将变量放在前面会更容易(也更安全)。它更安全,因为你不太可能不小心调用nextLine()两次(忘记把它从foo调用中取出)。
您还可以在调试器中查看“line”的值,而无需进入“foo”方法。
另一个可能发生的是:
FOO(b.c.d()); //在Java中,你在这一行得到一个NullPointerException ......
是“b”或“c”那个空的东西?不知道。
Bar b;
Car c;
int d;
b = ...;
c = b.c; // NullPointException here - you know b was null
d = c.d(); // NullPointException here - you know c was null
foo(d); // can view d in the debugger without having to go into foo.
有些调试器会让你突出显示“d()”并看看它输出了什么,但是如果“d()”有副作用,这是危险的,因为每次你得到调试器都会调用“d()”通过调试器获得的值。)
我为此编码的方式确实使它更加冗长(如同这个答案:-)但如果事情没有按预期发挥作用,它也会让我的生活变得更轻松 - 我花了很少的时间想知道出了什么问题,我也能够比我采用这种做法之前更快地修复错误。
对我而言,编程要保持一致是最重要的。如果你是一致的那么代码就更容易通过,因为你不是经常弄清楚发生了什么,你的眼睛会被代码中的任何“奇怪”所吸引。