当前位置:  开发笔记 > 运维 > 正文

在Delphi 2006中使用'WITH'语句调试问题

如何解决《在Delphi2006中使用'WITH'语句调试问题》经验,为你挑选了5个好方法。

With许多其中一种语言特征被认为属于"仅仅因为你拥有它并不意味着你必须使用它"类别.有少数场合我给它的房子,房间-我发现一个或两种情况下,它的使用非常复杂的多层次结构,编译器在哪里并不完全如你所期望离不开使用时是必不可少的它更容易包含,但在德尔福编码的10年中,我认为这些可以用一只手的手指来计算.

确实倾向于在示例中得到相当多的使用,因为代码看起来更清晰,但实际上,在查看您没有编写或未使用的代码时,确定变量是简单还是结构的一部分会对维护产生影响一段时间很容易超过这一点.在我使用过的每个版本的Delphi上调试器的已知问题都是关键.



1> Cruachan..:

With许多其中一种语言特征被认为属于"仅仅因为你拥有它并不意味着你必须使用它"类别.有少数场合我给它的房子,房间-我发现一个或两种情况下,它的使用非常复杂的多层次结构,编译器在哪里并不完全如你所期望离不开使用时是必不可少的它更容易包含,但在德尔福编码的10年中,我认为这些可以用一只手的手指来计算.

确实倾向于在示例中得到相当多的使用,因为代码看起来更清晰,但实际上,在查看您没有编写或未使用的代码时,确定变量是简单还是结构的一部分会对维护产生影响一段时间很容易超过这一点.在我使用过的每个版本的Delphi上调试器的已知问题都是关键.


我很想看到有必要的例子......我已经完成了Delphi 10年了,根据Fabricio的回答,已经花了9.5个删除WITH子句,并替换别名

2> Holgerwa..:

当鼠标悬停在变量上时,调试器无法在您要检查的源代码中显示的变量与相关的with语句之间建立连接.您必须检查debug-watch窗口中的值并在那里指定完整变量,例如MyNumber.Num.


我觉得"不能"太慷慨了.我会说它"没有"设计.

3> Toon Krijthe..:

with语句的调试问题是已知的.这是我看到它们时删除它们的原因之一.在我看来,你不应该以可维护性为代价来提高编码速度.

我看到很多(并且学会讨厌)的常见结构是:

with TMyObject.Create do
  try
    Method1(blah, blah, blah);
    Method2(blah, blah, blah);
  finally 
    Free;
  end;

甚至可以在with语句中添加更多构造:

with A, B, C, D do
  // Aargh!

但话说回来,如果你可以替换有时使用with语句的有效用途:

A.B.C.D.E.Method1;
A.B.C.D.E.Method2;
A.B.C.D.E.Method3;
A.B.C.D.E.Method4;
A.B.C.D.E.Method5;
A.B.C.D.E.Method6;

with A.B.C.D.E do begin
  Method1;
  Method2;
  Method3;
  Method4;
  Method5;
  Method6;
end;

尽管使用A.B.C.D.E有点疑问,但它往往是"delphi方式".但现在有了助手,我们可以拥有一个完美有效的解决方案:

TAHelper = class helper for TA
public
  procedure Method1;
endl

procedure TAHelper.Method1;
begin
  // You can (should) add sanity checks here.
  B.C.D.E.Method1;
end;

所以现在你可以使用:

A.Method1;

在我看来哪个好多了.



4> Mason Wheele..:

语句语法阿斯巴甜:它的味道像很多语法糖,但留下一个不好的回味和原来实际上是在长期内对人体有害.最好不要使用它.



5> Fabricio Ara..:

我很少使用With..do,并倾向于这样做

var
  Sc : TE_Type;
begin
  Sc := A.B.C.D.E;
  sc.Method1;
  sc.Method2;
  sc.Method3;
  sc.Method4;
  sc.Method5;
  sc.Method6;
end;

当然,Sc的一个不错的名字也不会受到伤害.而且我认为它比使用和调试器发现自己更好更清楚.所以,我非常喜欢'快捷'变量.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有