繁体   English   中英

在同一类中设置全局变量的例程的良好命名约定是什么?

[英]What is a good naming convention for a routine that sets a global variable in the same class

代码完成(第7章,第3节)说,应该为它返回的值命名一个好的函数,而在类中应该为它的作用命名一个好的过程名称。

当我在Delphi(2009之前)中编写同步方法时,有时需要使用它们来设置全局变量,这似乎是不好的编程习惯,但由于无法传递变量,因此这是必须的。 我不想将它们称为“获取”或“设置”,因为我将它们用于属性方法。

有没有更好的命名约定?

我不想将它们称为“获取”或“设置”,因为我将它们用于属性方法。

这似乎是一个非常武断的决定。 您是否可能还说过不想在“ setName”上使用“ set”,因为您也在“ setAge”上使用了它?

就是说,带有setter的静态变量实际上是一个公共全局变量ALA Basic-您确定这是完成任务的唯一方法吗?

我并不是说静态绝对是错误的,但是您应该尽最大努力在定义它的对象中操作它,而不要使用setter,否则您将以一种很难的方式暴露对象的很多内部状态控制。

我想说来自Code Complete的建议非常有力,而您的反对“因为我将那些用于我的属性方法”是很弱的。 无论如何,这些财产设定者应该是私人的。 将其视为重载的一种形式,并将其称为SetFoo和GetFoo。

您正在使用哪个Delphi版本? 如果使用D2006或2007,则可以使用类方法将全局变量移到类属性中,以获取和设置值。 由于这些是属性获取器和设置器,因此使用Get和Set是合适的。

type
 TMyObject = class(TObject)
 private
    class var
      FStringProperty : string;

    class function GetStringProperty: String; static;
    class procedure SetStringProperty(const Value : string);static;
  public
    class property StringProperty : String read GetStringProperty write SetStringProperty;
  end;

属性获取器设置器没有以getset开头的名称,因为这是为命名获取器设置器保留的约定。 他们之所以有这些名字,是因为他们就是这样做的 由于同步方法的目的是设置变量的值,因此给它取一个“设置”名称是很有意义的。

您可以选择一个同义词动词(例如Assigncopy)来区别于set ,但出于您描述的目的,这些动词是非常规名称。 当您有一个设置Foo值的例程时,约定规定该函数必须命名为SetFoo 最终,我认为您只需要克服有关使用getset来处理非属性访问器的麻烦。

在我看来,写全局变量应该很容易与普通的二传手区分开。 如果无法避免使用全局变量,我通常会使用

SetGlobalFoo(...);

以此目的。 长名称的开销是可以的IMO,因为这些构造应很少使用。

我将SetXXXGetXXX用于私有变量和全局变量,因为我看不到这些方法的区别。 SetXXX的操作是对数据区域的设置。 如果该数据区域是全局的,本地的或远程的,则它是方法的内部细节,不应从外部看到。

IDE将帮助您了解该数据区域是否是本地数据,但是如果您愿意,可以编写简单的注释行来说明它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM