老板让我整理公司的源程序,其中有一个已离开公司的牛人写的代码让我伤透人心。格式乱七八糟(空一二三格的都有,begin end,程序层次等),大小乱用,程序逻辑不清,这么简单的一个逻辑居然还用到Label和goto,对象创建后可能没有释放,而且没有一点注释。
应该说公司的规范是很严格的,该牛人居然一点都没有学到,难怪会被公司请走。唉我下次面试一定让应聘者先写一段程序,专考程序风格方面的,呵呵。现取一段供大家鉴赏:function ObjectEditor(Chart : TNAFProcessFlowChart; Obj : TNAFPFlowchartObject;FDataSource : TNAFDataSource;FBO:TNAfBusinessObject):Boolean;
var i : integer;
j : integer;
FsameName:boolean;
Query:Tadoquery;
label Error;
begin
Result := False;
query:=Tadoquery.Create (nil); try
with TNADProcessFlowObjectEditor.Create (nil) do begin
if not FDataSource.DataSet.Active then
FDataSource.DataSet.Open;
Nluemenu.DataSource :=FDataSource;
with Obj do begin
NlbeName.Text:=name;
NmemText.Text := text;
NlcbTextPosition.ItemIndex := Integer(VertTextPos) * 3 + Integer(HorzTextPos);
NlbeShapeWidth.Text := IntToStr(ShapeWidth);
NlbeHeight.Text := IntToStr(Height);
NlbeWidth.Text := IntToStr(Width);
Nluemenu.Text:='';
NbtnFont.Font.Assign(Font);
pColor.Color := ShapeColor;
pBkColor.Color := BkColor;
NchkTransparent.Checked := Transparent;
end;
FBO.ActiveDataSource :=FDataSource; Nluemenu.DataSource.DataSet.Edit;
Nluemenu.DataSource.DataSet.FieldByName('ROW_ID').AsString:=Obj.MID;
Nluemenu.DataSource.DataSet.OnCalcFields(Nluemenu.DataSource.DataSet); for i := 0 to ComponentCount - 1 do Components[i].Tag := 0;
init;
error:
FsameName:=false;
ShowModal ;
if ModalResult= mrOK then
for i := 0 to Chart.SelectedObjectCount-1 do
with Chart.SelectedObjects[i] do begin
if (Trim(NlbeName.Text )='') then begin
MessageDlg('Name can not null', mtError, [mbYes], 0);
goto Error;
end;
for j:=0 to Chart.ObjectCount-1 do
begin
if (Obj <> Chart.Objects[j]) then
if (Trim(NlbeName.Text)=Chart.Objects[j].Name) then FsameName:=true;
end;
if Fsamename=True then
begin
MessageDlg('Name is esist', mtError, [mbYes], 0);
goto Error;
end;
if NlbeShapeWidth.Tag = 1 then
ShapeWidth := NADProcessFlowEditor.IntegerToStr (NlbeShapeWidth.Text);
if pColor.Tag = 1 then
ShapeColor := pColor.Color;
if pBkColor.Tag = 1 then
BkColor := pBkColor.Color;
if NlcbTextPosition.Tag = 1 then
HorzTextPos := TNAfpfHorzPos(NlcbTextPosition.ItemIndex mod 3);
if NlcbTextPosition.Tag = 1 then
VertTextPos := TnafpFVertPos(NlcbTextPosition.ItemIndex div 3);
if NbtnFont.Tag = 1 then
Font.Assign(NbtnFont.Font);
if NlbeName.Tag = 1 then
Name := UpperCase(trim(NlbeName.Text));
if NmemText.Tag = 1 then
text := NmemText.Text ;
if Nluemenu.Tag =1 then
MID:= Trim(Nluemenu.Value);
if NlbeHeight.Tag = 1 then
if NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text)<38 then
Height:=38
else
Height := NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text);
if NlbeWidth.Tag = 1 then
if NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text)<38 then
Width:=38
else
Width := NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text);
if NchkTransparent.Tag = 1 then
Transparent := NchkTransparent.Checked;
if MID<>'' then
obj.HaveIcon:=true
else
obj.HaveIcon:=False;
Result := True;
end
else
result:=False;
if Nluemenu.DataSource.DataSet.State in [dsEdit] then
Nluemenu.DataSource.DataSet.Post;
Release;
end;
finally query.Free;
end;
PostMessage(Chart.Handle, WM_LBUTTONUP, 0, MakeLParam(0, 0));
end;
应该说公司的规范是很严格的,该牛人居然一点都没有学到,难怪会被公司请走。唉我下次面试一定让应聘者先写一段程序,专考程序风格方面的,呵呵。现取一段供大家鉴赏:function ObjectEditor(Chart : TNAFProcessFlowChart; Obj : TNAFPFlowchartObject;FDataSource : TNAFDataSource;FBO:TNAfBusinessObject):Boolean;
var i : integer;
j : integer;
FsameName:boolean;
Query:Tadoquery;
label Error;
begin
Result := False;
query:=Tadoquery.Create (nil); try
with TNADProcessFlowObjectEditor.Create (nil) do begin
if not FDataSource.DataSet.Active then
FDataSource.DataSet.Open;
Nluemenu.DataSource :=FDataSource;
with Obj do begin
NlbeName.Text:=name;
NmemText.Text := text;
NlcbTextPosition.ItemIndex := Integer(VertTextPos) * 3 + Integer(HorzTextPos);
NlbeShapeWidth.Text := IntToStr(ShapeWidth);
NlbeHeight.Text := IntToStr(Height);
NlbeWidth.Text := IntToStr(Width);
Nluemenu.Text:='';
NbtnFont.Font.Assign(Font);
pColor.Color := ShapeColor;
pBkColor.Color := BkColor;
NchkTransparent.Checked := Transparent;
end;
FBO.ActiveDataSource :=FDataSource; Nluemenu.DataSource.DataSet.Edit;
Nluemenu.DataSource.DataSet.FieldByName('ROW_ID').AsString:=Obj.MID;
Nluemenu.DataSource.DataSet.OnCalcFields(Nluemenu.DataSource.DataSet); for i := 0 to ComponentCount - 1 do Components[i].Tag := 0;
init;
error:
FsameName:=false;
ShowModal ;
if ModalResult= mrOK then
for i := 0 to Chart.SelectedObjectCount-1 do
with Chart.SelectedObjects[i] do begin
if (Trim(NlbeName.Text )='') then begin
MessageDlg('Name can not null', mtError, [mbYes], 0);
goto Error;
end;
for j:=0 to Chart.ObjectCount-1 do
begin
if (Obj <> Chart.Objects[j]) then
if (Trim(NlbeName.Text)=Chart.Objects[j].Name) then FsameName:=true;
end;
if Fsamename=True then
begin
MessageDlg('Name is esist', mtError, [mbYes], 0);
goto Error;
end;
if NlbeShapeWidth.Tag = 1 then
ShapeWidth := NADProcessFlowEditor.IntegerToStr (NlbeShapeWidth.Text);
if pColor.Tag = 1 then
ShapeColor := pColor.Color;
if pBkColor.Tag = 1 then
BkColor := pBkColor.Color;
if NlcbTextPosition.Tag = 1 then
HorzTextPos := TNAfpfHorzPos(NlcbTextPosition.ItemIndex mod 3);
if NlcbTextPosition.Tag = 1 then
VertTextPos := TnafpFVertPos(NlcbTextPosition.ItemIndex div 3);
if NbtnFont.Tag = 1 then
Font.Assign(NbtnFont.Font);
if NlbeName.Tag = 1 then
Name := UpperCase(trim(NlbeName.Text));
if NmemText.Tag = 1 then
text := NmemText.Text ;
if Nluemenu.Tag =1 then
MID:= Trim(Nluemenu.Value);
if NlbeHeight.Tag = 1 then
if NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text)<38 then
Height:=38
else
Height := NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text);
if NlbeWidth.Tag = 1 then
if NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text)<38 then
Width:=38
else
Width := NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text);
if NchkTransparent.Tag = 1 then
Transparent := NchkTransparent.Checked;
if MID<>'' then
obj.HaveIcon:=true
else
obj.HaveIcon:=False;
Result := True;
end
else
result:=False;
if Nluemenu.DataSource.DataSet.State in [dsEdit] then
Nluemenu.DataSource.DataSet.Post;
Release;
end;
finally query.Free;
end;
PostMessage(Chart.Handle, WM_LBUTTONUP, 0, MakeLParam(0, 0));
end;
已经很不错了。
我们有的同事写的是格式不规则,而且还函数里面套函数,说不定还有个dll。
一丁点注释都没有,你看都无从看起。
包括规范等都团队的共识,就应该遵守。
软件不再是作坊式的手工作业,如果在一个团队中,只有某个牛人的代码别人看不懂
或不愿看,我认为看不懂的原因可能有两个:水平很牛或意识很差,但如果某人的代码
别人都不愿意看了,那就只能说是这个人的意识很差了。
在软件工程化作业环境下,程序代码由程序员之间互相修改的是很正常的,所以一个
没有规范意识的程序员永远不可能很好的融入到团队中去的。这里说的仅仅是程序代码,系统设计也一样,需要规范。
FDataSource: TNAFDataSource; FBO: TNAfBusinessObject): Boolean;
var
I: integer;
J: integer;
FSameName: Boolean;
Query: Tadoquery;
label
Error;
begin
Result := False; Query := Tadoquery.Create(nil);
try
with TNADProcessFlowObjectEditor.Create(nil) do begin
if not FDataSource.DataSet.Active then
FDataSource.DataSet.Open;
NlueMenu.DataSource := FDataSource;
with Obj do begin
NlbeName.Text := name;
NmemText.Text := Text;
NlcbTextPosition.ItemIndex := Integer(VertTextPos) * 3 +
Integer(HorzTextPos);
NlbeShapeWidth.Text := IntToStr(ShapeWidth);
NlbeHeight.Text := IntToStr(Height);
NlbeWidth.Text := IntToStr(Width);
NlueMenu.Text := '';
NbtnFont.Font.Assign(Font);
pColor.Color := ShapeColor;
pBkColor.Color := BkColor;
NchkTransparent.Checked := Transparent;
end;
FBO.ActiveDataSource := FDataSource; NlueMenu.DataSource.DataSet.Edit;
NlueMenu.DataSource.DataSet.FieldByName('ROW_ID').AsString := Obj.MID;
NlueMenu.DataSource.DataSet.OnCalcFields(NlueMenu.DataSource.DataSet); for I := 0 to ComponentCount - 1 do
Components[I].Tag := 0;
init;
error:
FSameName := False;
ShowModal;
if ModalResult = mrOK then
for I := 0 to Chart.SelectedObjectCount - 1 do
with Chart.SelectedObjects[I] do begin
if (Trim(NlbeName.Text) = '') then begin
MessageDlg('Name can not null', mtError, [mbYes], 0);
goto Error;
end;
for J := 0 to Chart.ObjectCount - 1 do begin
if (Obj <> Chart.Objects[J]) then
if (Trim(NlbeName.Text) = Chart.Objects[J].Name) then
FSameName := True;
end;
if FSameName = True then begin
MessageDlg('Name is esist', mtError, [mbYes], 0);
goto Error;
end;
if NlbeShapeWidth.Tag = 1 then
ShapeWidth :=
NADProcessFlowEditor.IntegerToStr(NlbeShapeWidth.Text);
if pColor.Tag = 1 then ShapeColor := pColor.Color;
if pBkColor.Tag = 1 then BkColor := pBkColor.Color;
if NlcbTextPosition.Tag = 1 then
HorzTextPos := TNAfpfHorzPos(NlcbTextPosition.ItemIndex mod 3);
if NlcbTextPosition.Tag = 1 then
VertTextPos := TnafpFVertPos(NlcbTextPosition.ItemIndex div 3);
if NbtnFont.Tag = 1 then Font.Assign(NbtnFont.Font);
if NlbeName.Tag = 1 then Name := UpperCase(trim(NlbeName.Text));
if NmemText.Tag = 1 then Text := NmemText.Text;
if NlueMenu.Tag = 1 then MID := Trim(NlueMenu.Value);
if NlbeHeight.Tag = 1 then begin
if NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text) < 38 then
Height := 38
else
Height := NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text);
end;
if NlbeWidth.Tag = 1 then begin
if NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text) < 38 then
Width := 38
else
Width := NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text);
end;
if NchkTransparent.Tag = 1 then
Transparent := NchkTransparent.Checked; Obj.HaveIcon := MID <> '';
Result := True;
end
else
Result := False;
if NlueMenu.DataSource.DataSet.State in [dsEdit] then
NlueMenu.DataSource.DataSet.Post;
Release;
end;
finally
Query.Free;
end; PostMessage(Chart.Handle, WM_LBUTTONUP, 0, MakeLParam(0, 0));
end;
function ObjectEditor(Chart: TNAFProcessFlowChart; Obj: TNAFPFlowchartObject;
FDataSource: TNAFDataSource; FBO: TNAfBusinessObject): Boolean;
var
I,j: integer;
FSameName: Boolean;
Query: Tadoquery;
label
Error;
begin
Result := False; Query := Tadoquery.Create(nil);
try
with TNADProcessFlowObjectEditor.Create(nil) do begin
if not FDataSource.DataSet.Active
then FDataSource.DataSet.Open; NlueMenu.DataSource := FDataSource;
with Obj do begin
NlbeName.Text := name;
NmemText.Text := Text;
NlcbTextPosition.ItemIndex := Integer(VertTextPos) * 3 + Integer(HorzTextPos);
NlbeShapeWidth.Text := IntToStr(ShapeWidth);
NlbeHeight.Text := IntToStr(Height);
NlbeWidth.Text := IntToStr(Width);
NlueMenu.Text := '';
NbtnFont.Font.Assign(Font);
pColor.Color := ShapeColor;
pBkColor.Color := BkColor;
NchkTransparent.Checked := Transparent;
end; FBO.ActiveDataSource := FDataSource;
NlueMenu.DataSource.DataSet.Edit;
NlueMenu.DataSource.DataSet.FieldByName('ROW_ID').AsString := Obj.MID;
NlueMenu.DataSource.DataSet.OnCalcFields(NlueMenu.DataSource.DataSet); for I := 0 to ComponentCount - 1 do
Components[I].Tag := 0; init;
error:
FSameName := False;
ShowModal; if ModalResult = mrOK then
for I := 0 to Chart.SelectedObjectCount - 1 do
with Chart.SelectedObjects[I] do begin
if (Trim(NlbeName.Text) = '')
then begin
MessageDlg('Name can not null', mtError, [mbYes], 0);
goto Error;
end; for J := 0 to Chart.ObjectCount - 1 do begin
if (Obj <> Chart.Objects[J])
then if (Trim(NlbeName.Text) = Chart.Objects[J].Name)
then FSameName := True;
end; if FSameName = True
then begin
MessageDlg('Name is esist', mtError, [mbYes], 0);
goto Error;
end; if NlbeShapeWidth.Tag = 1
then ShapeWidth :=NADProcessFlowEditor.IntegerToStr(NlbeShapeWidth.Text); if pColor.Tag = 1
then ShapeColor := pColor.Color; if pBkColor.Tag = 1
then BkColor := pBkColor.Color;
if NlcbTextPosition.Tag = 1
then HorzTextPos := TNAfpfHorzPos(NlcbTextPosition.ItemIndex mod 3); if NlcbTextPosition.Tag = 1
then VertTextPos := TnafpFVertPos(NlcbTextPosition.ItemIndex div 3);
if NbtnFont.Tag = 1
then Font.Assign(NbtnFont.Font);
if NlbeName.Tag = 1
then Name := UpperCase(trim(NlbeName.Text));
if NmemText.Tag = 1
then Text := NmemText.Text;
if NlueMenu.Tag = 1
then MID := Trim(NlueMenu.Value);
if NlbeHeight.Tag = 1
then begin
if NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text) < 38
then Height := 38
else Height := NADProcessFlowEditor.IntegerToStr(NlbeHeight.Text);
end;
if NlbeWidth.Tag = 1
then begin
if NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text) < 38
then Width := 38
else Width := NADProcessFlowEditor.IntegerToStr(NlbeWidth.Text);
end;
if NchkTransparent.Tag = 1
then Transparent := NchkTransparent.Checked; Obj.HaveIcon := MID <> '';
Result := True;
end
else
Result := False;
if NlueMenu.DataSource.DataSet.State in [dsEdit]
then NlueMenu.DataSource.DataSet.Post;
Release;
end;
finally
Query.Free;
end;
PostMessage(Chart.Handle, WM_LBUTTONUP, 0, MakeLParam(0, 0));
end;
我自己认为,代码编写格式的问题,是coding当中比较小的一个问题!
看没看过一个c的头文件,大概有1万多个define,那才叫做郁闷,你跟踪的时候,就是一些莫名其妙的常数!哎,总之,维护代码就是个十分烦的事情!
关于格式及大小写,控件使名等,这是公司的规范,
其实公司的规范有也些不合理的地方,比如控件的前缀就过于繁琐,占了四个位呢。function ObjectEditor(Chart : TNAFProcessFlowChart; Obj : TNAFPFlowchartObject;FDataSource : TNAFDataSource):Boolean;
var
i, j : integer;
PrcEditor : TNAdProcessFlowObjectEditor;
begin
Result := False;
//创建对象编辑Form,置EditorChar和EditorObj对象,执行初始化方法
PrcEditor := TNAdProcessFlowObjectEditor.Create(Application);
try
PrcEditor.EditorChart := Chart;
PrcEditor.EditorObj := Obj;
PrcEditor.Init;
with PrcEditor do
begin
if not FDataSource.DataSet.Active then
FDataSource.DataSet.Open;
nlueMenu.DataSource := FDataSource; //传入数据
with Obj do
begin
nlbeName.Text:=Name;
nmemText.Text := Text;
nlcbTextPosition.ItemIndex := Integer(VertTextPos) * 3 + Integer(HorzTextPos);
nlbeShapeWidth.Text := IntToStr(ShapeWidth);
nlbeHeight.Text := IntToStr(Height);
nlbeWidth.Text := IntToStr(Width);
nlueMenu.Text:='';
nbtnFont.Font.Assign(Font);
pColor.Color := ShapeColor;
pBkColor.Color := BkColor;
nchkTransparent.Checked := Transparent;
end; //FBO.ActiveDataSource :=FDataSource;
//进入编辑状态,注意:不能将DataSet Post
nlueMenu.DataSource.DataSet.Edit;
nlueMenu.DataSource.DataSet.FieldByName('ROW_ID').AsString:=Obj.MID;
if Assigned(PrcEditor.nluemenu.DataSource.DataSet.OnCalcFields) then
nlueMenu.DataSource.DataSet.OnCalcFields(nlueMenu.DataSource.DataSet); //初始化组件Tag,该Tag用来标识该组件的值是否更改过。
for i := 0 to ComponentCount - 1 do
Components[i].Tag := 0; //显示 Dialog
ShowModal ; if ModalResult= mrOK then
begin
for i := 0 to Chart.SelectedObjectCount-1 do
begin
with Chart.SelectedObjects[i] do
begin //回传修改后的结果
if nlbeShapeWidth.Tag = 1 then
ShapeWidth := IntToStr(nlbeShapeWidth.Text);
if pColor.Tag = 1 then
ShapeColor := pColor.Color;
if pBkColor.Tag = 1 then
BkColor := pBkColor.Color;
if nlcbTextPosition.Tag = 1 then
HorzTextPos := TNAfPFHorzPos(nlcbTextPosition.ItemIndex mod 3);
if nlcbTextPosition.Tag = 1 then
VertTextPos := TNAfPFVertPos(nlcbTextPosition.ItemIndex div 3);
if nbtnFont.Tag = 1 then
Font.Assign(nbtnFont.Font);
if nlbeName.Tag = 1 then
Name := UpperCase(trim(nlbeName.Text));
if nmemText.Tag = 1 then
Text := nmemText.Text ;
if nluemenu.Tag =1 then
MID:= Trim(nlueMenu.Value); if nlbeHeight.Tag = 1 then
begin
if IntToStr(nlbeHeight.Text)<38 then
Height:=38
else
Height := IntToStr(nlbeHeight.Text);
end; if nlbeWidth.Tag = 1 then
begin
if IntToStr(nlbeWidth.Text)<38 then
Width:=38
else
Width := IntToStr(nlbeWidth.Text);
end; if nchkTransparent.Tag = 1 then
Transparent := nchkTransparent.Checked;
if MID<>'' then
Obj.HaveIcon:=True
else
Obj.HaveIcon:=False;
end;
end;
//已修改,返回True
Result := True;
end
else
begin
//取消
Result := False;
end;
end;
finally
FreeAndNil(PrcEditor);
end;
//刷新Chart的显示
PostMessage(Chart.Handle, WM_LBUTTONUP, 0, MakeLParam(0, 0));
end;