老板让我整理公司的源程序,其中有一个已离开公司的牛人写的代码让我伤透人心。格式乱七八糟(空一二三格的都有,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;

解决方案 »

  1.   

    这代码已经不错了。我们一个老员工遗留的毕业证打印的程序如果有你上面的一半整齐我就不会吧肺都气炸了。通常都是Warning:n十个,申请的变量没有用,写的函数没有用。都没注释掉。
      

  2.   

    他做的时候肯定是按格式写的,只是后来又添添改改,就成这样了。
    已经很不错了。
    我们有的同事写的是格式不规则,而且还函数里面套函数,说不定还有个dll。
    一丁点注释都没有,你看都无从看起。
      

  3.   

    我认为,关键是PASCAL语言没学好。
      

  4.   

    我看了CGI和PERL程序那才叫人想自杀呢,还有一些JAVASCRIPT也一样其实这个牛人的程序完全可以整理出来呵呵,话说回来,楼主把这程序贴出来,居心何在,不是要让所有的程序员自杀吗:-P
      

  5.   

    呵呵,先用个delfor 规范一下先,,,,,
      

  6.   

    我虽然不是用delphi的,但至少我看明白他的层次结构,所以我认为写的还可以
      

  7.   

    halfdream(哈欠) 说得有道理,代码评审确实很重要。应该说各个公司都会相应的文档管理规范,关键是在项目管理上可能或多或少会力度不够。但我认为每个程序员要从自己的长远发展出发,都应该有一个团队意识,
    包括规范等都团队的共识,就应该遵守。
    软件不再是作坊式的手工作业,如果在一个团队中,只有某个牛人的代码别人看不懂
    或不愿看,我认为看不懂的原因可能有两个:水平很牛或意识很差,但如果某人的代码
    别人都不愿意看了,那就只能说是这个人的意识很差了。
    在软件工程化作业环境下,程序代码由程序员之间互相修改的是很正常的,所以一个
    没有规范意识的程序员永远不可能很好的融入到团队中去的。这里说的仅仅是程序代码,系统设计也一样,需要规范。
      

  8.   

    我同意: foxyy8888(半山披) 这代码已经不错了。我们一个老员工遗留的毕业证打印的程序如果有你上面的一半整齐我就不会吧肺都气炸了。通常都是Warning:n十个,申请的变量没有用,写的函数没有用。都没注释掉。
      

  9.   

    看到这种代码,俺都是用DelForEx先格式化一遍再说我刚学D时,也是开始维护一个家伙的代码,就一个登陆的模块窗体,点OK写的代码,写了2K行,嘿嘿,你那些代码还算不错的了
      

  10.   

    改成这样大家意下如何(只谈格式哦,有板砖的只管扔)。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 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;
      

  11.   

    我的格式习惯。有问题说,咱们不带骂人的呦!
    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;
      

  12.   

    哈哈,如果那天微软把windows的代码公开了,说不定很多人会觉得写得很糟糕呢!
    我自己认为,代码编写格式的问题,是coding当中比较小的一个问题!
    看没看过一个c的头文件,大概有1万多个define,那才叫做郁闷,你跟踪的时候,就是一些莫名其妙的常数!哎,总之,维护代码就是个十分烦的事情!
      

  13.   

    既然大家这么热心,我就作些说明:其实这段代码主要乱在处理逻辑上,把goto的部分移到对话框的确定按钮去处理就清晰多了。
    关于格式及大小写,控件使名等,这是公司的规范,
    其实公司的规范有也些不合理的地方,比如控件的前缀就过于繁琐,占了四个位呢。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;