是德尔福“与”关键词不好的做法? [英] Is Delphi "with" keyword a bad practice?
问题描述
在delphi中,我一直在阅读关于 关键字的不好的东西,但是在我看来,如果你不使用它。它可以使你的代码看起来很简单。
我经常把我所有的TClientDataSets和TField放在TDataModules中。所以在我的表单中,我有这样的代码
过程TMyForm.AddButtonClick(发件人:TObject);
begin
with LongNameDataModule do
begin
LongNameTable1.Insert;
LongNameTable1_Field1.Value:=some value;
LongNameTable1_Field2.Value:= LongNameTable2_LongNameField1.Value;
LongNameTable1_Field3.Value:= LongNameTable3_LongNameField1.Value;
LongNameTable1_Field4.Value:= LongNameTable4_LongNameField1.Value;
LongNameTable1.Post;
end
end;
没有与关键字我必须写这样的代码
程序TMyForm.AddButtonClick(发件人:TObject);
begin
LongNameDataModule.LongNameTable1.Insert;
LongNameDataModule.LongNameTable1_LongNameField1.Value:=some value;
LongNameDataModule.LongNameTable1_LongNameField2.Value:= $ b $ b LongNameDataModule.LongNameTable2_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField3.Value:= $ b $ b LongNameDataModule.LongNameTable3_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField4.Value:= $ b $ b LongNameDataModule.LongNameTable4_LongNameField1.Value;
LongNameDataModule.LongNameTable1.Post;
结束
我认为使用与关键字更容易阅读。 >
我应该避免使用与关键字吗?
p>在A,B,C,D等病态之外,最大的危险在于,你的代码可以默认地改变意思,而不用通知你。考虑这个例子:
with TFoo.Create
try
Bar:= Baz;
DoSomething();
终于
免费;
结束
你写这个代码知道Bar是TFoo的属性,而Baz是类型的属性包含具有此代码的方法。
现在,两年后,一些很有意义的开发人员将一个Baz属性添加到TFoo。你的代码默默地改变了意义。编译器不会抱怨,但代码现在已经坏了。
I been reading bad things about the with keyword in delphi but, in my opinion, if you don't over use it. It can make your code look simple.
I often put all my TClientDataSets and TFields in TDataModules. So in my forms I had code like this
procedure TMyForm.AddButtonClick(Sender: TObject);
begin
with LongNameDataModule do
begin
LongNameTable1.Insert;
LongNameTable1_Field1.Value := "some value";
LongNameTable1_Field2.Value := LongNameTable2_LongNameField1.Value;
LongNameTable1_Field3.Value := LongNameTable3_LongNameField1.Value;
LongNameTable1_Field4.Value := LongNameTable4_LongNameField1.Value;
LongNameTable1.Post;
end
end;
without the with keyword I have to write the code like this
procedure TMyForm.AddButtonClick(Sender: TObject);
begin
LongNameDataModule.LongNameTable1.Insert;
LongNameDataModule.LongNameTable1_LongNameField1.Value := "some value";
LongNameDataModule.LongNameTable1_LongNameField2.Value :=
LongNameDataModule.LongNameTable2_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField3.Value :=
LongNameDataModule.LongNameTable3_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField4.Value :=
LongNameDataModule.LongNameTable4_LongNameField1.Value;
LongNameDataModule.LongNameTable1.Post;
end;
I think is easier to read using the with keyword.
Should I avoid using the with keyword?
The biggest danger of with, outside of pathological conditions like "with A, B, C, D" is that your code can silently change meaning with no notice to you. Consider this example:
with TFoo.Create
try
Bar := Baz;
DoSomething();
finally
Free;
end;
You write this code knowing that Bar is a property of TFoo, and Baz is a property of the type containing the method which has this code.
Now, two years later, some well-meaning developer comes in adds a Baz property to TFoo. Your code has silently changed meaning. The compiler won't complain, but the code is now broken.
这篇关于是德尔福“与”关键词不好的做法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!