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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 23:08   #1
@ndreiKO
Новичок
Джуниор
 
Регистрация: 22.08.2011
Сообщений: 1
Вопрос Как можно улучшить код

Есть код
Код:
var
...
begin
  ...
  Log.First();
  k = 0;
  // Цикл по записям лога
  while not Log.EOF() do
  begin
    // Если текущую работу выполнил наш пользователь
    if Log.Fields("UserName") = User.Name then
    begin
      // Добавим к переменной HoursWorked длительность текущей работы
      HoursWorked := HoursWorked + Log.Fields("Duration");
      inc(k);
    end;
    // Перейдем к следующей записи лога
    Log.Next();
  end;

  // Переведем общую длительность работ из минут в часы
  HoursWorked := HoursWorked / 60;
  // Вычислим среднюю длительность работ
  Avg := HoursWorked / k;

  // Зададим свойства отчета
  Report.Fields("UserField1") := User.Name;
  Report.Fields("UserField2") := FloatToStr(HoursWorked) + " (" + 
    FloatToStr(Avg) + " ч./работу)";
  Report.Fields("Title") := "Отчет по отработанному времени";
  Report.Fields("ViewScale") := "80%";
  Report.Fields("LeftMargin") := "2см";
  Report.Fields("RightMargin") := "1см";
  Report.Fields("TopMargin") := "1см";
  Report.Fields("BottomMargin") := "1см";
  ...
end;
Как сделать этот код более понятным и красивым?
@ndreiKO вне форума Ответить с цитированием
Старый 22.08.2011, 23:14   #2
Kingdom_Reborn
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 130
По умолчанию

я бы не писал begin в отделной строке
Kingdom_Reborn вне форума Ответить с цитированием
Старый 22.08.2011, 23:29   #3
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
k = 0;
А случаем не так?
Код:
 k := 0;
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 22.08.2011, 23:30   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Сложно что-либо сказать по такому малому куску кода, но, во-первых, у вас k сравнивается с нулём, а не инициализируется им (видимо опечатка), во-вторых, название для этой переменной можно придумать получше, например JobsNumber или что-то в этом духе. В-третьих, хранить в переменной HoursWorked минуты тоже немного неочевидный шаг, можно завести, к примеру, локальную переменную MinutesWorked, а потом присваивать HoursWorked := MinutesWorked / 60. Да, ещё лучше будет, если заменить Avg на, как минимум, Avarage, так будет яснее
netrino вне форума Ответить с цитированием
Старый 23.08.2011, 01:16   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
как минимум, Avarage, так будет яснее
А еще лучше на Average.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 23.08.2011, 04:21   #6
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

Код:
var
...
begin
  ...
  Log.First();
  k:=0;
 
  while not Log.EOF() do  // Цикл по записям лога
  begin   
    if (Log.Fields('UserName')=User.Name) then  // Если текущую работу выполнил наш пользователь  
    begin HoursWorked:=HoursWorked+Log.Fields("Duration"); k:=k+1; end;
    Log.Next();  // Перейдем к следующей записи лога
  end;

  HoursWorked:=HoursWorked/60;  // Переведем общую длительность работ из минут в часы
  Avg:=HoursWorked/k;           // Вычислим среднюю длительность работ

  // Зададим свойства отчета
  Report.Fields('UserField1')  := User.Name;
  Report.Fields('UserField2')  := FloatToStr(HoursWorked)+' ('+FloatToStr(Avg)+' ч./работу)';
  Report.Fields('Title')       := 'Отчет по отработанному времени";
  Report.Fields('ViewScale')   := '80%';
  Report.Fields('LeftMargin')  := '2см';
  Report.Fields('RightMargin') := '1см';
  Report.Fields('TopMargin')   := '1см';
  Report.Fields('BottomMargin'):= '1см';
  ...
end;
чисто на мой взгляд:

1. не длинные комментарии одной строчки писать в конце этой строчки
исключение - комментарий перед множеством строк (например, "Зададим свойства отчета")

2. поменьше пробелов, а то сквозь глаза проваливается! k:=0;
3. k:=k+1; - смотрится нагляднее, чем Inc(); но оправдано только если k, а не HoursWorked
4. выровнять однотипные присвоения - "Зададим свойства отчета" (здесь допустимы пробелы)
5. выровнять комментарии по возможности:
...oursWorked/60; // Переведе...
...ed/k; // Вычислим...

p.s.
я так как-то вообще без отступов привык все делать:
Код:
procedure Bugoga;
begin
while not Log.EOF() do  // Цикл по записям лога
begin   
end;
 
end;
ах, да, вот еще:
6. никаких переносов во время вызова функции!!!!!
Report.Fields("UserField2") := FloatToStr(HoursWorked) + " (" +
FloatToStr(Avg) + " ч./работу)";
ибо БЕСЕД! вызов функции одной строчкой, и только!
ну разве что за исключением CreateWindow )))

Последний раз редактировалось xrob; 23.08.2011 в 04:24.
xrob вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как можно сократить код sergio280888 БД в Delphi 0 17.04.2011 17:09
Как улучшить код kirza Общие вопросы Delphi 10 19.01.2011 18:14
Вопрос по символьным массивам. Как улучшить код. Aerial Общие вопросы C/C++ 4 13.04.2010 10:54
Как можно улучшить эффективность и качество ПП? Evgenii Помощь студентам 5 29.01.2009 16:22
Как можно сократить код jocry Общие вопросы Delphi 2 20.01.2009 08:35