加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 05:21:50 所属栏目:大数据 来源:网络整理
导读:我一直在读关于delphi的关键字的坏东西,但在我看来,如果你没有使用它。它可以使你的代码看起来很简单。 我经常把所有我的TClientDataSets和TFields在TDataModules。所以在我的形式我有这样的代码 procedure TMyForm.AddButtonClick(Sender: TObject);begin
我一直在读关于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。您的代码已静默更改意义。编译器不会抱怨,但代码现在损坏。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读