什么时候将局部变量作为参数推送到函数/方法,而不是使用类变量代替函数/方法变量。
例如,我可以有一个功能:
int DoSomething(int var)
{
if(var == -1)
return 0;
}
或者我可以有一个类变量“_var”并在同一个函数中使用它,如下所示:
int DoSomething()
{
if(_var == -1)
return 0;
}
如果我们在上面的示例中有一个名为DoSomething
的函数/方法中使用了一个类变量,那么我应该发送DoSomething
函数/方法将类变量作为参数,以便该函数更易于阅读和测试。
何时做好表格?我知道这是一个有问题的问题,但是我试图用同事来说明我的论点,他们说我会在函数/方法签名中添加更多代码,而不是保留函数/方法签名较小。
在我看来,我通过将类变量推送到相应的函数/方法来使代码更清晰,更容易维护,而不是强迫它们依赖/了解类变量的存在。
请告知。
答案 0 :(得分:10)
对于任何一般情况,唯一的答案是:它取决于您的具体情况。数据成员,静态成员和函数参数都提供不同的目的。当然,我们可以提供一些关键提示,以便您选择其中一种或哪种标志。
典型案例:
有一些不好选择的常见症状。
考虑以下问题:
我的印象是你和你的同事对这个参数的性质有一个简单的误解。确保你清楚地了解你的同事的论点并明确自己。试着改写一下你想说的是什么。
答案 1 :(得分:2)
我用依赖来看待它,即谁依赖于变量(在你的情况下是var
),它是方法还是类?
例如JavaBeans具有依赖于类的类变量,因此如果类需要这些变量,那么DoSomething()
是最好的。
或者,如果您的课程不关心var
并且在其他任何地方都不需要,并且只有DoSomething()
需要var
,那么DoSomething(int var)
是必不可少的。
答案 2 :(得分:0)
它不应该是什么提供更多或更少的代码或更多的努力键入。它是关于在类和函数的上下文中更合乎逻辑的东西。像你一样保持彼此隔离的东西通常是一件好事,但不要过度。当从函数的目的清楚它应该处理类var中包含的值时它应该这样做而不通过参数接收值。