是德尔福“与”关键字的坏习惯吗?

前端之家收集整理的这篇文章主要介绍了是德尔福“与”关键字的坏习惯吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一直在读关于delphi的关键字的坏东西,但在我看来,如果你没有使用它。它可以使你的代码看起来很简单。

我经常把所有我的TClientDataSets和TFields在TDataModules。所以在我的形式我有这样的代码

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;

没有with关键字我不得不写这样的代码

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;

我认为使用with关键字更容易阅读。

我应该避免使用with关键字?

解决方法

与“与A,B,C,D”的病理状况之外的最大的危险是,你的代码可以默默地改变意义,而不通知你。考虑这个例子:
with TFoo.Create
try
  Bar := Baz;
  DoSomething();
finally
  Free;
end;

你写这段代码,知道Bar是TFoo的属性,Baz是包含具有此代码方法的类型的属性

现在,两年后,一些有意义的开发商添加了一个Baz属性到TFoo。您的代码已静默更改意义。编译器不会抱怨,但代码现在损坏。

猜你在找的Delphi相关文章