Coding style 如果我们只需要在代码中创建一次对象,是否应该创建它们?

Coding style 如果我们只需要在代码中创建一次对象,是否应该创建它们?,coding-style,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()) 如果只在该方法调用中使用对象,那么最好直接将“new ClassA()”传入调用。这样,您就不会有一个额外

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

情况就是这样

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

如果只在该方法调用中使用对象,那么最好直接将“new ClassA()”传入调用。这样,您就不会有一个额外的变量,将来可能有人会错误地尝试使用它


但是,为了可读性和调试,创建临时对象并将其传入通常很有用。这样,在将变量传递到方法之前,您可以在调试器中检查该变量。

如果您仅在该方法调用中使用该对象,则最好直接将“new ClassA()”传递到调用中。这样,您就不会有一个额外的变量,将来可能有人会错误地尝试使用它


但是,为了可读性和调试,创建临时对象并将其传入通常很有用。通过这种方式,您可以在调试器中检查变量,然后再将其传递到方法中。

一般来说,我会说不,您所做的没有错,但听起来您的调用函数、被调用函数和临时对象之间的职责可能有些模糊。也许需要进行一些重构。

一般来说,我会说不,你所做的没有错,但听起来你的调用函数、被调用函数和临时对象之间的责任可能有些模糊。也许需要进行一些重构。

您的问题是“我们应该创建对象吗”;两个示例都创建了一个对象

这两个例子在逻辑上没有任何区别。给一个对象命名允许它在多个地方被引用。如果您不这样做,那么更清楚的是不要给它命名,这样维护代码的人可以立即看到该对象只传递给另一个方法。

您的问题是“我们应该创建对象吗”;两个示例都创建了一个对象


这两个例子在逻辑上没有任何区别。给一个对象命名允许它在多个地方被引用。如果您不这样做,那么更清楚的是不要给它命名,这样维护代码的人可以立即看到该对象只传递给另一个方法。

我个人更喜欢保持一致,让我的生活更轻松(我认为让我的生活更轻松可能不是你认为让你的生活更轻松的事情……所以你也要按照这个建议做。) 如果你有这样的东西:

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

我为此编写代码的方式确实使它更加冗长(如下面的答案:-),但如果事情没有按预期工作,我的生活也会变得更轻松-我花更少的时间思考出了什么问题,而且我也能够比采用这种方式之前更快地修复错误


对我来说,编程时最重要的事情是保持一致性。如果你是始终如一的,那么代码就更容易通过,因为你不必经常弄清楚到底发生了什么,你的眼睛就会被代码中的任何“奇怪”吸引。

我个人更喜欢事情始终如一,让我的生活更轻松(我认为让我的生活更轻松可能不是你认为让你的生活更轻松的事情……所以你也要按照这个建议做。) 如果你有这样的东西:

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

我的方式