用C++、公共变量或作用域仅限于函数的变量进行编码的更好方法是什么



我的类中有一个std::vector对象vector<float> foo,它由两个不同的类函数function1function2修改。

目前,我已经公开了该变量,并且这两个函数都可以直接访问该变量,而无需我显式传递。

但我突然想到,我可以这样写代码;

vector<float> function1()
{
...
return foo;
}
int function2(vector<float> foo)
{
process(foo);
return 1;
}

这两种方法都给出了相同的结果,并且正在发挥作用,但我想知道什么是正确和最佳的方法。该类不会被继承。

程序变得复杂。

为了在不引入bug的情况下修改一段代码,你需要幸运地理解代码,测试并消除每个bug,或者将这三者结合起来。

程序作用于某一组";状态";;变量、线程、操作系统和计算机状态。如果你不知道程序在什么状态下运行,就不可能理解它,而获得良好的测试覆盖率也是不可能的。

对清除参数进行操作并输出清除参数的函数更容易知道它们与什么状态交互。与全局变量交互的函数意味着调用它的代码从未传入该全局变量,也从未从函数中取回它,但全局变量的状态改变了调用的操作,调用后的所有其他代码现在都可以采取不同的操作。

如果函数将state作为参数并返回,则函数的调用方可以知道它只修改了传入的内容。因此,他们可以在不读取函数的情况下推断哪些内容没有更改。他们也暗示了它的变化。

在函数内部,当它调用另一个函数时也会出现同样的问题。如果它在全局状态下运行,它必须知道it调用的函数是以奇怪的方式读取还是写入它。

这里的目标是减少你必须了解的关于特定代码段的内容,以了解它的作用,从而使程序能够扩展得更大。有一种经典的编程风格,它涉及到很好地学习代码;在你的大脑中";,其中,您不关心参数是由全局变量传递还是作为函数参数传递;这种风格一直有效到不行。大多数情况下,当你切换到不工作的代码时,或者当你头脑中的代码复杂性让你疲惫不堪时,它就会失败。因此,现代编程试图找到管理代码的方法,而不需要把整个程序都记在脑子里。

最新更新