微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我一直在读关于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。您的代码已静更改意义。编译器不会抱怨,但代码现在损坏。

原文地址:https://www.jb51.cc/delphi/103631.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐