用 C++ 编写代码的更好方法是 public 变量还是范围仅限于函数的变量?
What is a better way to code in C++, a public variable or a variable whose scope is limited to a function?
我的 class、vector<float> foo
中有一个 std::vector
对象,它被两个不同的 class 函数修改 function1
和 function2
.
目前,我已经创建了变量public,两个函数都可以直接访问该变量,而无需我明确传递。
但是我突然想到我可以这样写代码;
vector<float> function1()
{
...
return foo;
}
int function2(vector<float> foo)
{
process(foo);
return 1;
}
这两种方法给出相同的结果并且都有效,但我想知道什么是正确和最佳的方法来做到这一点。 class 不会被继承。
程序变得复杂。
为了在不引入错误的情况下修改一段代码,您需要运气好,理解代码,测试并消除每个错误,或者 3.
程序作用于一些“状态”;变量、线程、OS 和计算机状态。如果你不知道一个程序作用于什么状态,就不可能理解它,获得良好的测试覆盖率同样是不可能的。
对明确参数进行操作并输出明确参数的函数更容易知道它们正在与什么状态交互。与全局变量交互的函数意味着调用它的代码永远不会传入那个全局变量,也不会从函数中取回它,但是全局变量的状态改变了调用所做的事情,调用之后的所有其他代码都可以现在采取不同的行动。
如果函数将状态作为参数并返回,函数的调用者可以知道它只修改了它传入的内容。因此他们可以在不阅读函数的情况下推断出什么没有改变。他们有关于它改变了什么的提示。
在函数内部,调用另一个函数时出现同样的问题。如果它在全局状态上运行,它必须知道函数 it 调用是否以奇怪的方式读取或写入它。
这里的目标是减少您必须了解一段特定代码才能知道它做什么的事情的数量,从而允许程序扩展得更大。有一种经典的编程风格涉及学习代码,以至于你的程序“在你的大脑中”,你不关心参数是由全局变量传递还是作为函数参数传递;这种风格一直有效,直到它不起作用。大多数情况下,当您切换到您不在使用的代码时,或者当您头脑中的代码复杂性让您不知所措时,它通常会失败。因此,现代编程寻求找到无需将整个程序记在脑海中即可管理代码的方法。
我的 class、vector<float> foo
中有一个 std::vector
对象,它被两个不同的 class 函数修改 function1
和 function2
.
目前,我已经创建了变量public,两个函数都可以直接访问该变量,而无需我明确传递。
但是我突然想到我可以这样写代码;
vector<float> function1()
{
...
return foo;
}
int function2(vector<float> foo)
{
process(foo);
return 1;
}
这两种方法给出相同的结果并且都有效,但我想知道什么是正确和最佳的方法来做到这一点。 class 不会被继承。
程序变得复杂。
为了在不引入错误的情况下修改一段代码,您需要运气好,理解代码,测试并消除每个错误,或者 3.
程序作用于一些“状态”;变量、线程、OS 和计算机状态。如果你不知道一个程序作用于什么状态,就不可能理解它,获得良好的测试覆盖率同样是不可能的。
对明确参数进行操作并输出明确参数的函数更容易知道它们正在与什么状态交互。与全局变量交互的函数意味着调用它的代码永远不会传入那个全局变量,也不会从函数中取回它,但是全局变量的状态改变了调用所做的事情,调用之后的所有其他代码都可以现在采取不同的行动。
如果函数将状态作为参数并返回,函数的调用者可以知道它只修改了它传入的内容。因此他们可以在不阅读函数的情况下推断出什么没有改变。他们有关于它改变了什么的提示。
在函数内部,调用另一个函数时出现同样的问题。如果它在全局状态上运行,它必须知道函数 it 调用是否以奇怪的方式读取或写入它。
这里的目标是减少您必须了解一段特定代码才能知道它做什么的事情的数量,从而允许程序扩展得更大。有一种经典的编程风格涉及学习代码,以至于你的程序“在你的大脑中”,你不关心参数是由全局变量传递还是作为函数参数传递;这种风格一直有效,直到它不起作用。大多数情况下,当您切换到您不在使用的代码时,或者当您头脑中的代码复杂性让您不知所措时,它通常会失败。因此,现代编程寻求找到无需将整个程序记在脑海中即可管理代码的方法。