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

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

例如,我可以有一个function:

int DoSomething(int var) { if(var == -1) return 0; } 

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

 int DoSomething() { if(_var == -1) return 0; } 

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

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

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

请指教。

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

典型案例:

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

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

请考虑以下问题:

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

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

我从依赖性的角度看待它,即谁依赖于变量(在你的情况下是var ),它是一个方法还是一个类?

例如,JavaBeans具有依赖于类的类变量,因此如果类需要这些变量,那么DoSomething()是最好的。

或者,如果您的类不关心var并且在其他任何地方都不需要它,并且只有DoSomething()需要var ,那么DoSomething(int var)是必不可少的。

它不应该是什么提供更多或更少的代码或什么需要更多的努力键入。 它是关于在该类和函数的上下文中更合乎逻辑的内容。 像你一样保持彼此隔离的东西通常是一件好事,但不要过度。 当从函数的目的清楚它应该处理类var中包含的值时,它应该这样做并且不通过参数接收值。