是德尔福“与”关键字的坏习惯吗?
发布时间: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。您的代码已静默更改意义。编译器不会抱怨,但代码现在损坏。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |