向高手请教一下代码编写风格(100分)

  • 主题发起人 主题发起人 bin_75
  • 开始时间 开始时间
B

bin_75

Unregistered / Unconfirmed
GUEST, unregistred user!
最近象得了强迫症一样我总是把代码写成如下形式
procedure TSPMain.lbtnPreClick(Sender: TObject);
begin
if (curTable='') or (curMb='') then
begin
MessageBox(0, '请先择择好数据表与打印模版', '', MB_ICONWARNING or MB_OK);
exit;
end;
with dmSuper do
begin
frxdbsetPPrint.DataSet:=adsShowData;
rptPrint.ShowReport;
end
// with
end;
如果在过去我会写成
procedure TSPMain.lbtnPreClick(Sender: TObject);
begin
if (curTable='') or (curMb='') then
begin
MessageBox(0, '请先择择好数据表与打印模版', '', MB_ICONWARNING or MB_OK);
end
else
begin
with dmSuper do
begin
frxdbsetPPrint.DataSet:=adsShowData;
rptPrint.ShowReport;
end
// with
end;
end;

请问一下这两种写法哪一种好点?能不能从代码效率与风格上分别讲一讲
 
个人看法:
效率没有多大差别。
第1种方法代码简洁一些,特别是当第2种方法的 else begin ... end 中代码较多时。
 
呵,我也倾向于第一种方式.不喜欢用太多的else
 
我喜欢第二种。不喜欢用Exit,违背单入单出的原则
 
都差不多,只是可读性好与不好而已。
 
我用的更多的是第一种
简洁,查看明了!
 
理论是人创造的。原则,是好与不好的问题。
风格有好和不好,好与不好界限也不是有明确的界限的。
不要有什么负担。
效率无差别,但是扩展不同,第一种语言也不好,首先,MessageBox的0就是屏幕,可是有时我们的不激活的时候根本不是屏幕。建议封装好。,第一种扩展度好。
代码对于BEGIN-END语句可以使用//进行注释,避免太多的嵌套是好的方法。如果过于复杂,需要重构,在有些时候,权衡所致,过度的遵循某种法则,你的风格就僵化。
function ShowMessageEx(AText:string;ACaption:String;aICON:integer):integer;
var
Handle:HWND;
begin
if Screen.ActiveForm=nil then
Handle:=0
else
handle:=Screen.ActiveForm.Handle;//不一定是屏幕。
Result:=MessageBox(handle,pchar(AText),pchar(ACaption),aICON);
end;

function InfoMessage(AText:String):integer;
begin
Result:=ShowMessageEx(atext,'提示信息',MB_ICONINFORMATION);
end;
function ErrMessage(Atext:string):integer;
begin
Result:=ShowMessageEx(Atext,'出错了!',MB_ICONERROR);
end;

function WarnMessage(Atext:String):integer;
begin
Result:=ShowMessageEx(Atext,'警告!',MB_ICONWARNING);
end;

function AskMessage(Atext:String):integer;
begin
Result:=ShowMessageEx(Atext,'你要怎么做呢?',MB_ICONQUESTION or MB_YESNO);
end;

因为我们的弹出窗口一定很多,建议封装使用更好。有些遵循PascalCasing的命名规范。
切忌,所有的规范都是为项目和效率服务。譬如规定Edit命名为edt,那是使用ed_还是使用edt_还是edt,那个好。我们有个别使用其他的组件,难道都要刻意使用规范吗?
规范是为效率服务的,也是为团队服务的,规范是符合一定规则,每个人能够接受的协议。更好为效率服务,否则规范,一分不值。就是狗屁。


procedure TSPMain.lbtnPreClick(Sender: TObject);//这里的按钮命名也不对,建议使用btnPreview,英文缩写歧义多。
procedure TSPMain.btnPreviewClick(Sender: TObject);
begin
if (curTable='') or (curMb='') then
begin
ErrorMessage('请先择择好数据表与打印模版');//封装好。
Exit;//这里注意大小写。风格
end;
//如果选择了打印模板不是空,就可以打印了:如果过多的判断,判断需要重新重构。适当的注释是一个不错的选择。
with dmSuper do
begin
frxdbsetPPrint.DataSet:=adsShowData;//这里歧义改adsShowData是什么?数据集??table还是query,adoquery,adotable,还是其他。
rptPrint.ShowReport;
end;// with使用注释增加可读性不错。
end;
 
用raise,不是用MessageBox+Exit

raise在单独运行时,是直接中断后续且弹出ERROR框。

多用raise,我觉得要将自己的代码风格要多趋于VCL代码风格
 
多注意大小写,多写些const业定义形参,将参数变量前面加A,表示函数参数。。。
这样,别人接手代码,看你的代码,很容易理解你的代码,代码简单化,标准化。尽量别让别人知道自己有自己的风格。
BS生怕别人不知自己写的,写上一堆的“与众不同”代码,标榜自己代码。
 
多看看经典的代码,就知道,其实没有什么 [单入单出] 原则, 那是一种 误导人的东东。
看一下 fabrice.bellard 的代码 ,根本就没有 用到 [单入单出] ,清晰,高效 的代码就是好代码。
 
多人接受答案了。
 
后退
顶部