Delphi随笔一

原创 2002年03月30日 10:35:00

一、老生长谈
    Delphi VS VC已经是很古老的话题了,但是我还是想在这里谈一下,全是一家之言,如果不同意,请一笑之。
    RAD的好处是很易见的,界面的设计上Delphi实在是高过VC。我要写一个非常规的透明按钮,Delphi只要找个控件,点一下鼠标,修改一下Caption就OK了,VC呢?至少要写上10几行代码才能搞定,当然MFC的做法让人了解windows底层的原理,但是OOP的封装性没有很好的体现,开发者要了解所有的底层才能写代码,对我对大多数的入门者是个折磨,因为没必要,现在是开发期限永远紧张,时间永远不够,我们不能指望程序员知道Windows编程的所有的方面,有人对视频很了解,有人对网络很在行,但是没有人是全才,样样在行是不现实的,所以封装是很重要的。如果每次开发新产品我都要在一个透明按钮或者一个漂亮的界面上花30%甚至更多的时间,那我就去跳河:)Delphi在界面上的确比MFC好!当然不是说MFC就设计不出漂亮的界面,只是花费的时间太长,不值得。
    RAD就真的全是好处?也不是。至少对于初学者不是,因为它让人误会编程只是动动鼠标,拉拉框架,最后的结果就是让人觉得,Delphi就是用来写界面的,底层什么都不能做。好像MFC程序员都是这么讲Delphi程序员的:“你们的程序除了界面漂亮,还能做什么?”错!其实除了DDK,Delphi什么不能开发?API的头文件Delphi哪个没有?Borland没有转换的,JEDI都转换了,即使JEDI没有转,自己动手也是一样的,只要给我C的头文件,我就可以转换,JEDI上那篇短短的转换说明应该是每个Delphi程序员的必备文档。头文件转换了,剩下的就是开写了,MFC能做的,Delphi也可以!视频?网络?directx?Audio?哪个Delphi不能做?

二、子过程
    写一个事件,很多人就是直接开写,不管代码有多长,做的事情有多少,只要是在一个事件里做的,一古脑写下去,结果是几个月后重新修改的时候无从下手,因为代码段实在太长了。那么为什么不把代码段拆开呢?人的注意力有有限的,超过100行的代码一口气看下来会晕的,Delphi的前辈告诉我一件事情:所有的过程(这里的过程包括procedure和function)不要超过25行!因为这个长度的代码看起来不会让你头晕,你会很容易了解这个过程要做的事情。
    那么怎么把原本在一个事件做的事情拆开呢?方法很多,我的经验是模块化。比如一个事件里要做很多不同的事情,那么就把不同的事情化为不同的子过程,然后在主过程里调用,主过程里大多数就是一些判断和循环,不会出现具体的实现过程,这样会生出很多的代码段,但是会让你的注意力集中!
    原则:一个过程只做一件事情,并且做好它。
    参考:VCL的源代码。看看VCL的源代码,很少有超过25行的代码段!

三、参数名
    记得当初学SDK的时候,我一看到匈牙利表示法就头晕,太多了!记不住啊!所以我恨那个发明者:)终于Delphi出现了,戴着镣铐跳舞的日子过去了!在Delphi里,定义一个字符串用strDoSometing这样的变量名是可笑的和不必要的。只要你的过程很短,不出现全局变量,就不需要这样的前缀。比如:
procedure SubPro;
var
  i : byte;
  Width, Height : integer;
begin
  Width := GetWidth;
  Height := GetHeight;
  for i:=0 to 9 do
  begin
    DrawThread := TDrawThread.Create;
    DrawThread.Width := Width;
    DrawThread.Height := Height;
    DrawThread.Start;
  end;
end;
    我想这样的代码段虽然没有注释,也很容易知道他要做的事情。所以,请去掉所有的前缀和下划线,Delphi的程序不需要这些!我们的参数名只要动词+名词就可以,只要说明这个参数的作用就可以,多余的东西我们不要,简单就是美,Pascal的好处就在于代码像在说话,而不是读天书,你的脑袋里是怎么想的,代码就是什么样子的。优美、简单,这是Pascal的好处,请遵守!
    原则:简单就是美!

四、子窗口
    很多人在调用子窗口的时候是直接对子窗口里的控件操作的,比如:
  if SetAlarmParamDlg.ShowModal = MrOK then
  begin
    AlarmTimes := StrToInt(SetAlarmParamDlg.Edit1.Text);
    AlarmArea  := SetAlarmParamDlg.SpinEdit1.Value;
  end;
    天,假如明天用户觉得你用的Edit或者SpinEdit的样子难看,换了一个漂亮的控件,你怎么办?不但要修改子窗口的代码,还要修改主窗体的代码。一两个子窗口的程序当然不会让你痛苦,假如是一个有二十多个子窗体的程序呢?花一天的时间,原因却只是因为换了一个控件!为什么不换一个方法?把要用的参数用属性表示,你会少写无数的代码。
// 主窗体
  if SetAlarmParamDlg.ShowModal = MrOK then
  begin
    AlarmTimes := SetAlarmParamDlg.AlarmTimes;
    AlarmArea  := SetAlarmParamDlg.AlarmArea;
  end;

// 子窗体
interface
private
  FAlarmTimes : integer;
  FAlarmArea : integer;
published
  property AlarmTimes : integer read FAlarmTimes write FAlarmTimes;
  property AlarmArea : integer read FAlarmArea write FAlarmArea;

implementation
...
  FAlarmTimes := StrToInt(Edit1.Text);
  FAlarmArea := SpinEdit1.Value;
 
  ModalResult := MrOK;
...

    只要这样坚持下来,你会发现好处大大的,一个子窗口只做他自己的事情,主窗口和他的交互是通过属性来做的,只要接口不变,子窗口的修改不会影响到主窗口的代码,不管子窗口的样子怎么变换,控件怎么更换,代码怎么修改,整个程序都还是老样子,只是界面变了而已。
    原则:模块化你的子窗口,窗口也是类,类之间怎么通信,窗口之间就应该怎么通信


    我的文字功底不是很好,不大善于表达,如果写的有什么不对的地方,欢迎扔砖头:)

博客园首页新随笔联系管理订阅 随笔- 7 文章- 0 评论- 4 ElasticSearch 5.0.1 java API操作

博客园首页新随笔联系管理订阅 随笔- 7  文章- 0  评论- 4  ElasticSearch 5.0.1 java API操作   ...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年12月25日 09:15
  • 620

2016新年随笔

前言 题外话:【我爱王梦】 生活:        高考时的失利,让我在很大的一段时间内都走不出来,那段时间真的不知道自己在想什么?又到底在做着什么?说真的,那段时间我感觉到了真正的孤独,没...
  • wangmeng951011
  • wangmeng951011
  • 2016年02月11日 12:02
  • 471

寒假计划随笔

未来畅想      大三过半,已经到了为未来做打算的时候了。我打算不考研了,我认为本专业的实践能力比较重要,早些着手实践,工作一段时间以后有精力的话就准备考研,提升自己的知识储备。大学三年我的实践能...
  • yangyayan21
  • yangyayan21
  • 2018年01月20日 10:39
  • 40

企业战略管理笔记

天津大学 赵国杰教授:企业战略管理 MBA课程 管理是指在一定组织中的管理者,运用一定的职能和手段来协调他人的劳动,使别人同自己一起超高效率地实现组织既定目标的活动过程。 社会科学,人类行为科学-...
  • snicolashe
  • snicolashe
  • 2016年08月30日 01:10
  • 987

博客园的 “随笔、文章、新闻、日记”有啥区别

今天才发现:博客园的随笔,文章,日记的区别 随笔:是一些比较杂乱的技术类东西且有待修改和讨论的文章,假如是原创则只是作者随时提笔写下的内容,而并没有经过太多的推敲,甚至措辞也没有得到很合理的...
  • chongtianfeiyu
  • chongtianfeiyu
  • 2013年09月06日 16:27
  • 3202

博客园的 “随笔、文章、日记”有什么区别?

博客园的 “随笔、文章、日记”有什么区别?生成的url有区别“p/articles/diary”,并且日记不公开...
  • yunweifun
  • yunweifun
  • 2017年12月17日 09:25
  • 265

2017年结尾随笔

转眼间,2017年也到了尾声,回头看看上次发表博客的时间,已然是年初的事情了,别有一番滋味在心头,到底还是把博客这件事情给淡忘了,其实也是有一丝挫败之感.   刚开始工作以来,看过无数前辈的...
  • nbsp22
  • nbsp22
  • 2017年12月29日 21:21
  • 262

金融随笔

资本市场会买的永远都只是学徒,会卖的才是师傅,欲望的膨胀才是最可怕,花了几年时间始终无法完成自己内心的转化,贪婪才是最可怕的毒药!...
  • zzytmxk
  • zzytmxk
  • 2016年12月02日 22:27
  • 128

【生活随笔】行走

启程少年初长成,振翅欲飞,壮心不已。好吧,背上包去游历!头顶青天,脚踏土地,方方正正,坚定不移!路上行走时自由的,可以选择搏击风浪,也可以选择曲径通幽。行走是未知的,前面也许是鸟语花香,也可能是毒莽怪...
  • liangjingbo
  • liangjingbo
  • 2013年12月11日 21:56
  • 1400

delphi与api中的加一减一函数

用于增减变量的并不是常用的Inc/Dec过程,而是用了InterlockedIncrement/InterlockedDecrement这一对过程,它们实现的功能完全一样,都是对变量加一或减一。但它们...
  • diligentcat
  • diligentcat
  • 2012年07月27日 12:08
  • 791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi随笔一
举报原因:
原因补充:

(最多只允许输入30个字)