创建代码块是不好的做法吗?


12

在C ++中,不好的做法是在某些函数中创建代码块,例如:

    bool f()
    {
       {
           double test = 0;

           test = // some other variable outside this function, for example.

           if (test == // some value)
             return true;
       }

       {
           double test = 0;

           test = // some variable outside this function, different from the last one.

           if (test == // some value)
             return true;
       }

       return false;

    }

这样做的目的是针对同一类型的过程多次使用相同的变量名称“ test”。在实际的项目中,我有多个变量并且正在执行多个测试。考虑到测试是如此相似,我真的不想继续为每个测试创建具有不同名称的新变量。

插入代码块以使变量在每次测试后超出范围,然后我可以再次使用它们的名称,这是不好的做法吗?还是我应该寻求其他解决方案?应该注意的是,我考虑对所有测试使用相同的变量集(并在每次测试结束后将它们全部设置为0),但是我觉得这可能是不好的做法。


19
如果我正在接受这段代码,我会告诉您将这些测试中的每一个分成单独的方法...因此,您不需要使用代码块来分别定义它们的范围。
Maybe_Factor

1
@Maybe_Factor-我同意。单独方法的好处是,您可以命名每个块,从而提供更具可读性的代码。
mouviciel

@mouviciel不仅可读性强的代码,而且可读性强的测试报告!
Maybe_Factor

@Maybe_Factor我不同意。将事物移动到单独的函数中会带来负面影响,使它们看起来像是很少可重用的功能。将功能的所有逻辑都放在一个地方是好的。
Miles Rout

1
@MilesRout这不是一个逻辑功能,这是一个功能的多个单元测试,所有这些功能都挤在一个测试功能中。普通代码中的代码块与功能完全是另一个讨论。
Maybe_Factor

Answers:


22

如果您使用块来限定某些资源的范围,则它们是完全合理的。文件,网络连接,内存分配,数据库事务等。在这些情况下,该块实际上是代码逻辑结构的一部分:您生成资源,它存在一段时间,然后在指定的时间消失。

但是,如果您正在做的只是确定名称,那么我会说这是错误的做法。当然,一般来说;特殊情况可以适用。

例如,如果此功能是由某些代码生成系统,测试框架等生成的,则出于名称范围的考虑,块是很合理的事情。但是您会谈论的是为机器而非人而编写的代码。

如果人们在编写代码时需要在同一函数中重用名称,那么我想说这些块可能需要是单独的函数。特别是如果这些名称在这些块中以不同的类型和/或含义使用。


10

创建这样的块不是坏习惯。这是作用域的工作方式。

通常,这是在使用RAII(资源获取为初始化)时完成的,并且您希望控制何时调用析构函数。

如果时间太长,我会考虑将代码移至其自身的功能。

在我看来,仅使用它来回收变量名并不是一个好主意。但是我看到它在内存不足的情况下很有用


重用局部变量名称对内存使用没有影响。
凯文·克莱恩

1
您不认为智能优化器可以为2个变量使用1个内存位置吗?
罗伯特·安德鲁杰克

3
是。但是,如果它们在相同范围内,并且没有析构函数,它也可以这样做。
塞巴斯蒂安·雷德尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.