分享
 
 
 

Delphi随笔一

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

一、老生长谈

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;

...

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

原则:模块化你的子窗口,窗口也是类,类之间怎么通信,窗口之间就应该怎么通信

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有