如果我们在代码中只需要一次对象,我们应该创建对象吗?

时间:2009-03-30 06:14:19

标签: coding-style

这是一种编码风格的问题: -

以下是案例

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())

4 个答案:

答案 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()”通过调试器获得的值。)

我为此编码的方式确实使它更加冗长(如同这个答案:-)但如果事情没有按预期发挥作用,它也会让我的生活变得更轻松 - 我花了很少的时间想知道出了什么问题,我也能够比我采用这种做法之前更快地修复错误。

对我而言,编程要保持一致是最重要的。如果你是一致的那么代码就更容易通过,因为你不是经常弄清楚发生了什么,你的眼睛会被代码中的任何“奇怪”所吸引。