C++ c+的调制码+;

C++ c+的调制码+;,c++,parameters,module,C++,Parameters,Module,我听说最好的做法是“调整”代码,以尽量减少代码对代码其他部分的依赖 如果我有一个浮点数: float X = 1000; 以及使用X的函数: void A() { //use X } 函数直接使用X,还是使用这样传递的参数更好: void A(float param) { //use param } A(X); 这样称呼它: void A(float param) { //use param } A(X); 或者简化使用第一个函数?决定某个对象是参数还是全局对

我听说最好的做法是“调整”代码,以尽量减少代码对代码其他部分的依赖

如果我有一个
浮点数

float X = 1000;
以及使用
X
的函数:

void A()
{
    //use X
}
函数直接使用
X
,还是使用这样传递的参数更好:

void A(float param)
{
    //use param
}
A(X);
这样称呼它:

void A(float param)
{
    //use param
}
A(X);

或者简化使用第一个函数?

决定某个对象是参数还是全局对象的最佳经验法则就是“你会用不同的参数调用它吗?”?也就是说,
A
是否需要不同的
X

如果
X
是一个常量,如字节中的位数或重力常量,则将其设置为常量,不要浪费时间将其作为参数传入。另一方面,如果它可能因调用而异,请将其作为参数


另外,不要进行不必要的模块化。如果你只在一个地方使用
A
,并且
A
不是特别长,那么最好把它放在一行中,这样可以减少人们为了理解你的代码而必须阅读的代码量。

决定某个东西是参数还是全局的最佳经验法则就是“你会用不同的参数调用它吗”?也就是说,
a
会需要不同的
X
值吗

如果
X
是一个常量,如字节中的位数或重力常量,请将其设置为常量,不要浪费时间将其作为参数传入。另一方面,如果它可能因调用而异,请将其设置为参数


另外,不要进行不必要的模块化。如果您只在一个地方使用
A
,并且
A
不是特别长,那么最好不要将它放在一行中-这将减少人们为了理解您的代码而必须阅读的代码量。

如果您仅为函数
A()全局声明
X
,你不应该。 而是在main中本地声明它,并通过参数在函数中传递它

此外,如果您仅为函数声明
X
,并希望修改其值,则应通过引用传递它

void main ()
{
    float X = 1000;
    A(&X)
}

void A(float *ptr)
{
    // Do operations with *ptr which has the value of X in main()
}

如果您仅为函数
A()
全局声明
X
,那么您不应该这样做。 而是在main中本地声明它,并通过参数在函数中传递它

此外,如果您仅为函数声明
X
,并希望修改其值,则应通过引用传递它

void main ()
{
    float X = 1000;
    A(&X)
}

void A(float *ptr)
{
    // Do operations with *ptr which has the value of X in main()
}
这个例子很糟糕:

// Define global variable ...
float X = 1000;
// ... and expect A() to work with it ...
A();
// ... because there is a hidden dependency.
这个例子很好:

// Define local variable ...
float X = 1000;
// ... and let A() work with it.
A(X);
// Everything is explicit and clean here.
请注意,好的方法允许您通过以下方式简化代码:

// Just do it.
A(1000);
这个例子很糟糕:

// Define global variable ...
float X = 1000;
// ... and expect A() to work with it ...
A();
// ... because there is a hidden dependency.
这个例子很好:

// Define local variable ...
float X = 1000;
// ... and let A() work with it.
A(X);
// Everything is explicit and clean here.
请注意,好的方法允许您通过以下方式简化代码:

// Just do it.
A(1000);

问题是,A会使用与X不同的值吗?也许。目前不会,但在我的代码中,我尝试更多地使用参数,而不是直接访问全局变量,因为我永远不知道我在代码的未来会做什么,并且希望使它成为我非常小心的最动态和可重用的代码。这是一个平衡点在规划未来和实现今天需要的东西之间。太多的泛型而没有相应的即时需求可能会导致无法维护的代码。问题是,a是否会使用与X不同的值?也许。目前不会,但在我的代码中,我尝试更多地使用参数,而不是直接访问全局变量,因为你是否知道我将在代码的未来做什么,并希望使其成为最具动态性和可重用性的代码?我会非常小心。在规划未来和实现今天所需之间需要取得平衡。如果没有相应的即时需求,过多的泛型可能会导致无法维护的代码。这称为依赖注入在上,你可以在上面找到一些文档,解释优点和缺点。Iv'e对此做了一些阅读。我可以看到测试方式的明显好处。有什么缺点?这叫做依赖注入,你可以在上面找到一些文档,解释优点和缺点。Iv'e对此做了一些阅读。我可以看到明显的好处在测试的过程中,会有什么负面影响?