使用类变量与将本地变量发送到函数/方法

Ric*_*ick 6 c++ java function object

何时将局部变量作为参数推送到函数/方法,而不是使用类变量代替函数/方法变量.

例如,我可以有一个功能:

int DoSomething(int var)
{
   if(var == -1)
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者我可以有一个类变量"_var"并在同一个函数中使用它,如下所示:

int DoSomething()
{
   if(_var == -1)
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,如果我们在一些函数/方法中使用了一个类变量,DoSomething在上面的例子中调用,我应该将DoSomething函数/方法作为参数发送给类变量,这样函数就更容易了阅读和测试.

什么时候做好形式?我知道这是一个有问题的问题,但是我试图用同事来说明我的论点,他们说我会在函数/方法签名中添加更多代码,而不是保留函数/方法签名较小.

在我看来,我通过将类变量推送到相应的函数/方法来使代码更清晰,更容易维护,而不是强迫它们依赖/了解类变量的存在.

请指教.

And*_*ron 11

对于任何一般情况,唯一的答案是:它取决于您的具体情况.数据成员,静态成员和函数参数都有不同的用途.当然,我们可以提供一些关键提示,您应该选择哪种类型的标志来选择其中一种.

典型案例:

  • 数据成员:该值是对象的一部分(如在类的实例中)状态.您希望对方法的其他调用来反映此特定状态.
  • 静态成员:该值与所有类的实例具有同时,相同的含义.这通常仅用于常量(即使在运行时初始化时,如单例),但在某些情况下,需要可变类状态.
  • 函数参数:该值仅对函数/方法的特定执行有意义.此值可能会从一次调用更改为下一次调用.

有一些不好选择的常见症状.

请考虑以下问题:

  • 您是否始终将相同的值传递给方法,无论您从哪里调用它? 考虑使参数成为常量并隐藏参数.考虑定义重载:一个没有参数用于常见情况,另一个用于灵活性参数.
  • 每次调用函数时是否需要设置数据成员(通过setter)? 考虑将值作为函数的参数.如果您需要用两行替换每个调用来预先设置值,则无需保存函数签名.

我的印象是你和你的同事对这个参数的性质有一个简单的误解.确保你清楚地了解你的同事的论点并明确自己.试着改写一下你想说的是什么.