代码完成(第7章,第3节)说,应该为它返回的值命名一个好的函数,并且应该为类的名称命名一个好的过程名。
当我在Delphi中编写同步方法(2009年之前)时,我有时需要使用它们来设置全局变量,这是一个看似糟糕的编程实践,但由于我无法传递变量,因此需要一次。我不想称它们为“Get”或“Set”,因为我将它们用于我的属性方法。
任何人都有更好的命名约定吗?
答案 0 :(得分:3)
我不想称他们为“获取”或 “设置”,因为我使用那些为我的 财产方法。
这似乎是一个非常随意的决定。你是否也说你不想在“setName”上使用“set”,因为你也在“setAge”上使用过它?
也就是说,使用setter的静态字面意思是公共全局变量ALA Basic--你确定这是完成任务的唯一方法吗?
我不是说静态是完全错误的,但是你应该尽力在定义它的对象中操作它而不是使用setter,否则你会以一种正在发生的方式暴露你对象的大部分内部状态很难控制。
答案 1 :(得分:1)
我会说Code Complete的建议非常强烈,你的反对意见“因为我将这些用于我的属性方法”非常弱。无论如何,那些属性设置者/获取者应该是私有的。将其视为一种重载形式,并将其称为SetFoo和GetFoo。
答案 2 :(得分:1)
您使用的是什么Delphi版本?如果使用D2006或2007,则可以使用类方法将全局变量移动到类属性中以获取和设置值。由于这些是属性getter和setter,因此使用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;
答案 3 :(得分:1)
属性getter和setter没有以 get 和 set 开头的名称,因为它是为命名getter和setter而保留的一些约定。他们有这些名字,因为就是他们所做的。由于您的synchronized方法的目的是设置变量的值,因此给它一个“set”名称是完全合理的。
你可以选择一个同义动词,比如 assign 或 copy ,只是为了与 set 不同,但这些是非常规的名字。你所描述的目的。如果您有一个设置Foo
值的例程,则约定规定该函数必须命名为SetFoo
。最后,我认为你只需要克服关于使用 get 和 set 来处理非属性访问者的任何挂断。
答案 4 :(得分:0)
在我看来,写入全局变量应该很容易与普通的setter区分开来。如果无法避免全局变量,我通常会使用
SetGlobalFoo(...);
为此目的。长名称的开销是OK IMO,因为这些构造应该很少使用。
答案 5 :(得分:0)
我会将SetXXX
和GetXXX
用于私有变量和全局变量,因为我看不出这些方法的作用有何不同。对SetXXX
的操作是对数据区域的设置。如果该数据区域是全局的,本地的或远程的,则该方法的内部细节不应从外部可见。
IDE将帮助您了解该数据区域是否为本地数据,但如果您愿意,可以编写一条简单的注释,说明它。