Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2009, 16:19   #1
Powerfull100
Пользователь
 
Аватар для Powerfull100
 
Регистрация: 05.08.2009
Сообщений: 10
По умолчанию Строгость кода ????

Доброго времени суток.
После отсылки кода заказчику(Делфи), пришел ответ - "Недостаточная строгость кода"....
Если можна подскажите пожайлуста что вообще имееться ввиду ... что вообще за бяка такая строгость кода и где ее можно посмотреть или почитать. По гулглю искал но что-то ничего внятного так и не нашел.
Заранее спасибо.
Не делает ошибок тот, кто вообще ничего не делает.
Powerfull100 вне форума Ответить с цитированием
Старый 05.08.2009, 16:22   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Соблюдение отступов, нормальные и логичные имена функций и переменных. Отсутствие, по возможности, дублирования кода.
oleg kutkov вне форума Ответить с цитированием
Старый 05.08.2009, 16:29   #3
Powerfull100
Пользователь
 
Аватар для Powerfull100
 
Регистрация: 05.08.2009
Сообщений: 10
По умолчанию

Хм .... С отступами и дублированием вроде бы все норм ... имена хм ... может что-то и накрутил. Я конечно извиняюсь за наглость но если я кусок кода пришлю Вы сможете указать на явные ошибки? Чтобы я их избежал впреть.
Не делает ошибок тот, кто вообще ничего не делает.
Powerfull100 вне форума Ответить с цитированием
Старый 05.08.2009, 16:33   #4
Вавел из ГМТУ
Форумчанин
 
Регистрация: 19.06.2009
Сообщений: 896
По умолчанию

Клади код сюда.
Я например негативно отношусь к плохому оформлению.
Вот мой вариант оформления:

Код:
Procedure TForm1.FindFile(ProgLog : TListBox; Dir, FileNameMask : String);
Var
  SR: TSearchRec;
  FindRes: Integer;
Begin
FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
While FindRes = 0 Do
   Begin
      if ((SR.Attr and faDirectory) = faDirectory) and
      ((SR.Name='.') Or (SR.Name='..')) Then
         Begin
            FindRes := FindNext(SR);
            Continue;
         End;
      If ((SR.Attr and faDirectory) = faDirectory) Then
         Begin
            FindFile(ProgLog ,Dir + SR.Name + '\', FileNameMask);
            FindRes := FindNext(SR);
            Continue;
         End;
      If Pos(AnsiUpperCase(FileNameMask), AnsiUpperCase(SR.Name)) > 0 Then
      ProgLog.Items.Add(#9 + Dir +
      SR.Name + ' (' + IntToStr(GetFileSize(Dir + SR.Name)) + ' kb)' );
      FindRes := FindNext(SR);
   End;
FindClose(SR);
End;
Отступы, заглавные буквы, пробелы - это я считаю обязательный атрибут кода.
Вавел из ГМТУ вне форума Ответить с цитированием
Старый 05.08.2009, 17:06   #5
Powerfull100
Пользователь
 
Аватар для Powerfull100
 
Регистрация: 05.08.2009
Сообщений: 10
По умолчанию

Вот например
Код:
function TSTThread.WriteLog(Mess : string): boolean;
var
    buf :  array[0..100] of char;
    name:string;
    st : OFSTRUCT;
    PathLogFile : array[0..150] of char;
    HdLog : word;
    res : dword;
Begin
  try
   Mess := Mess+#10+#13;
   name := ExtractFilePath(ParamStr(0))+'firstthread.log';
   FillChar(PathLogFile,Sizeof(PathLogFile),#0);
   StrPCopy(PathLogFile,name);
   
   if fileExists(name) then
     Begin
         HdLog:=OpenFile(PathLogFile,st,OF_READWRITE);
         SetFilePointer(HdLog,0,nil,FILE_END);
     end
   else
     Begin
        HdLog:=CreateFile(PathLogFile,GENERIC_READ or GENERIC_WRITE,0,Nil,OPEN_ALWAYS,0,0);
     end;

   FillChar(buf,Sizeof(buf),#0);
   StrPCopy(buf,Mess);
   WriteFile(HdLog,buf,length(Mess),res,Nil);
   CloseHandle(HdLog);
  except
     //
  end;
WriteLog := true;

end;
или
Код:
procedure TSTThread.Execute;
var
  Msg:TMsg;
  IniFile:TIniFile;
  Port, Addr : string;
Begin
   try     //Об"явлення компонентів для роботи з бд бух системи
 if AdsDictionary = nil then
    Begin
       AdsDictionary := TAdsDictionary.Create(nil);
       AdsDictionary.AliasName := 'Universal';
       AdsDictionary.CommunicationType := ctAdsDefault;
       AdsDictionary.IsConnected := false;
       AdsDictionary.LoginPrompt := false;
       AdsDictionary.Password := '****';
       AdsDictionary.UserName := '******';
    end;
  
 if AdsConnection = nil then
    Begin
       AdsConnection := TAdsConnection.create(nil);
       AdsConnection.AliasName := 'Universal';
       AdsConnection.CommunicationType := ctAdsDefault;
       AdsConnection.Compression := ccAdsCompressionNotSet;
       AdsConnection.LoginPrompt := false;
       AdsConnection.Password := '***';
        AdsConnection.Name := '***';
       AdsConnection.StoreConnected := true;
       AdsConnection.Username := '*****';
       AdsConnection.IsConnected := true;
    end;
   except
     on E: Exception do
       WriteLog('Ошибка при конетке'+E.Message);
   end;
     //Запит до БД  (компонент квері)
 try
   AdsQueryThread := TAdsQuery.Create(nil);
   AdsQueryThread.AdsConnection := AdsConnection;
   AdsQueryThread.DatabaseName := 'ADS';
 except
     on E: Exception do
       WriteLog('ошибка при запросе'+E.Message);
 end;
 if (UserID<>'') and (UserID<>'0') then
      Begin
         if (Part<>'') and (Part<>'0') then  //Партію
           OPER := 3
         else
           OPER := 2;
      end
    else
      OPER := 1;
******** и тд.
Не делает ошибок тот, кто вообще ничего не делает.
Powerfull100 вне форума Ответить с цитированием
Старый 05.08.2009, 17:17   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Какой кошмай. Надо так:
Код:
procedure TForm1.FindFile(ProgLog : TListBox; Dir, FileNameMask : string);
var
  SR: TSearchRec;
  FindRes: Integer;
begin
  FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
  while (FindRes = 0) do
  begin
    if ((SR.Attr and faDirectory) = faDirectory) and
        ((SR.Name = '.') or (SR.Name = '..')) then
    begin
      FindRes := FindNext(SR);
      continue;
    end;

    if ((SR.Attr and faDirectory) = faDirectory) then
    begin
      FindFile(ProgLog ,Dir + SR.Name + '\', FileNameMask);
      FindRes := FindNext(SR);
      continue;
    end;

    if (Pos(AnsiUpperCase(FileNameMask), AnsiUpperCase(SR.Name)) > 0) then
    begin
      ProgLog.Items.Add(#9 + Dir + SR.Name + ' (' +
                                IntToStr(GetFileSize(Dir + SR.Name)) + ' kb)' );
    end;

    FindRes := FindNext(SR);
  end;

  FindClose(SR);
end;
Form1, Button1,... всегда нужно переименовывать в адекватные имена типа: frmMain, btnOk, btnCancel,...
Про отсутствие комментов тоже молчу.
Ну да ладно. Это я конечно так... придираюсь. На вкус и цвет товарищей нет. Тут кому как больше нравится.
Строгость кода - понятие расплывчатое, так что только на примерах можно сделать предположение, что под этим понималось. Точно ответить может только заказчик, у которого вполне логично было и поинтерисоваться, что его не устраивает.
pu4koff вне форума Ответить с цитированием
Старый 05.08.2009, 17:22   #7
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Меня клонит/клонило всегда в сторону си, щас на дельфи прекратил, только заканчиваю выполнение, больше не буду писать, теперь только с++. Я бы ваш код оформил так (всегда так оформляю) что-то типа этого
Код:
function TSTThread.WriteLog(Mess: String): Boolean;
var
  buf: array[0..100] of Char;
  Name: String;
  st: OFSTRUCT;
  PathLogFile: array[0..150] of Char;
  HdLog: Word;
  res: DWord;
begin
  try
    Mess := Mess + #10 + #13;
    name := ExtractFilePath(ParamStr(0)) + 'firstthread.log';
    FillChar(PathLogFile, Sizeof(PathLogFile), #0);
    StrPCopy(PathLogFile, Name);

    if FileExists(name) then
    begin
      HdLog := OpenFile(PathLogFile, st, OF_READWRITE);
      SetFilePointer(HdLog, 0, NIL, FILE_END);
    end else
    begin
      HdLog := CreateFile(PathLogFile, GENERIC_READ or GENERIC_WRITE, 0, NIL, OPEN_ALWAYS, 0, 0);
    end;

    FillChar(buf, Sizeof(buf), #0);
    StrPCopy(buf, Mess);
    WriteFile(HdLog, buf, Length(Mess), res, NIL);
    CloseHandle(HdLog);
  except
  end;

  WriteLog := True;
end;
Вообще, на счет имен функций (был бы это си, не было бы вопросов), я всегда соблюдаю регистр названия функции, т.е. например функция MyFunction, где-то объявлена, вы у себя ее вызываите (пишите) именно в таком же виде MyFunction, например myFunction - уже не то, думаю Вы поняли меня.
BOBAH13 вне форума Ответить с цитированием
Старый 05.08.2009, 17:37   #8
Powerfull100
Пользователь
 
Аватар для Powerfull100
 
Регистрация: 05.08.2009
Сообщений: 10
По умолчанию

Спасибо за ответы. Буду более внимателен .
Цитата:
Строгость кода - понятие расплывчатое, так что только на примерах можно сделать предположение, что под этим понималось. Точно ответить может только заказчик, у которого вполне логично было и поинтерисоваться, что его не устраивает.
Это да ... думаю так оно и будет просто у меня были проблемы с самой сутю вопроса "Строгость кода" просто раньше не сталкивался с таким выражениям (да стыдно ). Как-то я не провел взаимосвязь с "Правилами оформления" и "Строгость кода". Спасибо за разъяснения.
Не делает ошибок тот, кто вообще ничего не делает.
Powerfull100 вне форума Ответить с цитированием
Старый 05.08.2009, 17:38   #9
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Вот почитай http://edn.embarcadero.com/article/10280
Hollander вне форума Ответить с цитированием
Старый 05.08.2009, 17:39   #10
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от Powerfull100 Посмотреть сообщение
Вот например
Если кратко, то нет общего стиля. В одном месте написано так, в другом - иначе. В основном это отступов касается.
Код:
function TSTThread.WriteLog(Mess : string): boolean;
var
    buf :  array[0..100] of char; // Почему 100?
    name:string;
    st : OFSTRUCT; // странное название типа
    PathLogFile : array[0..150] of char; // Почему 150?
    HdLog : word;
    res : dword;
Begin // Просто интересно:
  // почему begin с большой буквы, а end - с маленькой?
  try
   Mess := Mess+#10+#13;
   name := ExtractFilePath(ParamStr(0))+'firstthread.log';
   FillChar(PathLogFile,Sizeof(PathLogFile),#0);
   StrPCopy(PathLogFile,name);
   
   if fileExists(name) then
     Begin
         HdLog:=OpenFile(PathLogFile,st,OF_READWRITE);
         SetFilePointer(HdLog,0,nil,FILE_END);
     end
   else
     Begin
        HdLog:=CreateFile(PathLogFile,GENERIC_READ or GENERIC_WRITE,0,Nil,OPEN_ALWAYS,0,0);
     end;

   FillChar(buf,Sizeof(buf),#0);
   StrPCopy(buf,Mess);
   WriteFile(HdLog,buf,length(Mess),res,Nil);
   CloseHandle(HdLog);
  except
     // Почему тут нет
     // WriteLog := false; ?
  end;
WriteLog := true;
// Зачем вообще это функция, если она всегда true возвращает?
end;
Код:
procedure TSTThread.Execute;
var
  Msg:TMsg;
  IniFile:TIniFile;
  Port, Addr : string;
Begin
   try     //Об"явлення компонентів для роботи з бд бух системи
 if AdsDictionary = nil then // Куда "уплыло" if ?
    Begin
       ...
    end;
  
 if AdsConnection = nil then // Аналогично
    Begin
       ...
    end;
   except
     on E: Exception do
       WriteLog('Ошибка при конетке'+E.Message); // Что за слово такое? Даже слова коннект нет, есть "соединение".
   end;
     //Запит до БД  (компонент квері)
 try
   AdsQueryThread := TAdsQuery.Create(nil);
   // Что значит Thread в конце?
   // Обычно так называют потоки, т.е. наследники TThread
   AdsQueryThread.AdsConnection := AdsConnection;
   AdsQueryThread.DatabaseName := 'ADS'; // Что эта константа делает в коде?
  // Ну и в других местах тоже константам этим в коде не место
  // Захочу я БД переименовать на сервере
  // и по всему коду шуршать, чтобы все эти 'ADS' заменить?
 except
     // Как тут может возникнуть ошибка запроса,
     // если вы его не выполняете?
     // Или это какой-то удивительный самопальный компонент,
     // который выполняет запросы автоматически?
     on E: Exception do
       WriteLog('ошибка при запросе'+E.Message);
 end;
...
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оптимизация кода viscas PHP 3 31.05.2009 16:04
Оптимизация кода nusik Общие вопросы Delphi 2 21.05.2009 17:55
Перевод кода ELL Помощь студентам 0 07.06.2008 01:36
разрядность кода satanatas Помощь студентам 4 11.01.2008 18:15
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51