Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор тестов, Тестирования кода 
:(
    Опции темы
THandle
Дата 6.7.2008, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



И так, продолжимс...
Код


procedure TfrmTest.FormCreate(Sender: TObject);
  var
  str:TStringList;
  I,x:Integer;
  mi:TMenuItem;
  s:string;
begin
programDir:=ExtractFilePath(ParamStr(0));
str:=TStringList.Create;
x:=9;
str.LoadFromFile(ExtractFilePath(ParamStr(0))+'path.list');
if x>str.Count - 1 then x:=str.Count - 1;

for I := 0 to x do
   begin
     mi:=TMenuItem.Create(MainMenu1);
     mi.Caption:=str[I];
     mi.Name:='mi'+IntToStr(I);
     mi.Tag:=I;
     mi.OnClick:=ExecSubMenu;
     Reopen1.Add(mi);
   end;
sSkinManager1.SkinDirectory:=ExtractFilePath(ParamStr(0));
sSkinManager1.Active:=true;
GeneralIniLoad;
s:=ParamStr(1);
if Length(s)>3 then
begin
ClientDataSet3.FileName:=s;
ClientDataSet3.Open;
FileOpen1.Dialog.FileName:=s;
SavePathList(s);
Zastroy;
end;

end;




Первое что бросается в глаза - неосмысленные какие-то значения: 8, 3...
Я бы вынес их в константы с понятным именем. А то разбираться в коде, в котором присутствуют подобные числа - довольно сложно.
Так же не плохо было бы использовать, вообще, везде в программе, комментарии. Я комментирую практически каждую строчку кода, что не является хорошо. Советую комментировать хотя бы переменные.

Дальше...

Откуда тут вообще берется некий ParamStr(1). Он вообще хто такой?
Не вижу тут опять try..finally и не вижу освобождения занятых ресурсов...
Кстати... Zastroy - это супер название. Очень понравилось smile 


Сегодня продолжать не могу - интернет кончился :( теперь завтра.


Rohoss, советую начать переписывать программу учитывая все замечания. А так же, огромная просьба - оформлять код красиво.
Для меня красиво - то как оформлен мой код. Хотя это тоже не идеально. Но глянь пару моих сообщений и делай хотя бы так же. Просто намного приятнее будет читать такое. Еще не плохо бы поменять названия переменных. Они должны восприниматься на лету.


Например представь:

Есть у нас класс - Кот(Животное).
Есть у него метод - мяукать.

Объявишь ты переменную, с названием x.

И что же?

Разве красиво будет выглядить такое?

x.Мяукать;

Нет.

Намного лучше назвать все это осмысленным именем.
Например:

КотВаська : Кот;

КотВаська.Мяукать;

Ведь намного же легче читается?

Ну вот и постарайся чтобы твой код можно было читать на одном дыхании. Как какую-нибудь очень интересную книгу. smile 

Вот пример такого кода:

http://forum.vingrad.ru/forum/topic-204531.html



Удачи!!!
PM   Вверх
Rohoss
Дата 7.7.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Делаю пока такие выводы
1.    Чаще использовать try finaly , тем более, где вопрос касается создания объектов
2.    Использовать константы (почти вообще не использую)
3.    Комментарии (обычно комментирую, но редко)
Названия переменных для меня лично понятны, хотя над этим тоже надо подумать…
THandle, не плохо если бы ты выслал часть своего кода посмотреть….



--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
Rohoss
Дата 7.7.2008, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



"Zastroy" - это у меня стандартное название  smile 


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
THandle
Дата 8.7.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 65
Всего: 372



Цитата(Rohoss @  7.7.2008,  20:16 Найти цитируемый пост)
1.    Чаще использовать try finaly , тем более, где вопрос касается создания объектов
2.    Использовать константы (почти вообще не использую)
3.    Комментарии (обычно комментирую, но редко)


Вот давай переписывай код с учетом этого smile 

Цитата(Rohoss @  7.7.2008,  20:16 Найти цитируемый пост)

Названия переменных для меня лично понятны, хотя над этим тоже надо подумать…


Названия переменных типа:

Код


rht:THTMLout;
voprStr:TStringList;
otv,rotv:string;
tg,inx:Integer;
rb:boolean;
sm:TsMemo;
sR:TsRadioGroup;


Мне лично категорически не понятны smile 

Цитата(Rohoss @  7.7.2008,  20:16 Найти цитируемый пост)
THandle, не плохо если бы ты выслал часть своего кода посмотреть….


Не могу. Так как:

http://forum.vingrad.ru/forum/topic-219450.html

Сейчас просто на ноутбуке только код с текущего проекта, который еще не является даже полностью рабочим.


Цитата(Rohoss @  7.7.2008,  20:35 Найти цитируемый пост)
"Zastroy" - это у меня стандартное название


 smile 


Дальше глянем:
Код


procedure TfrmTest.SaveResult;
var
I:Integer;
rht:THTMLout;
voprStr:TStringList;
otv,rotv:string;
tg,inx:Integer;
rb:boolean;
sm:TsMemo;
sR:TsRadioGroup;
begin
voprStr:=TStringList.Create;

rht:=THTMLout.Create(nameTest);
 for I := 0 to sPageControl1.PageCount-1 do
   begin
   sm:=(frmTest.sPageControl1.Pages[I].FindComponent('sMeM'+IntToStr(I))as TsMemo);
   voprStr.Text:=sm.Text;

   //ShowMessage(voprStr.Text);
   tg:=sPageControl1.Pages[I].Tag;

   sR:=(frmTest.sPageControl1.Pages[I].FindComponent('sRG'+IntToStr(I)) as TsRadioGroup);
   inx:=sR.ItemIndex;
   try
   otv:=sR.Items[inx];
   except
   otv:='Без ответа'
   end;

   try
   rotv:=sR.Items[tg-1];
   except
   rotv:='Правильный ответ не был назначен';
   end;
   rb:= tg-1=inx;
   rht.Add(voprStr,otv,rotv,rb);

   end;

sSaveDialog1.FileName:='Result.html';
if sSaveDialog1.Execute then
begin
rht.SaveToFile(sSaveDialog1.FileName);
end;
voprStr.Free;
rht.Free;
ShellExecute(0,'OPEN',PChar(sSaveDialog1.FileName), Nil, Nil, SW_SHOW);

end;



Вот это не понятно:
Код


   inx:=sR.ItemIndex;
   try
   otv:=sR.Items[inx];
   except
   otv:='Без ответа'
   end;


Как то не красиво выглядит. Неужели обычной проверкой нельзя узнать чему равен Inx, и исходя из этого уже присваивать значения?


Ну в этом юните вроде все...
Хотя возможно я что-то проглядел.

Код

type THTMLout = class
constructor Create(testName:string);
destructor Destroy; reintroduce;
procedure Add(vopros:TStringList;otv,rightotv:string;rigght:boolean);
procedure SaveToFile(FileName:string) ;
 private
  fTable:TStringList;
  fSumOtv, fSumRightOtv:Integer;
end;



Лично мне удобнее описывать члены класса в таком порядке:

private
protected
public


Да и привычнее как-то выглядело бы...

Код


for I := 0 to vopros.Count - 1 do
 begin
  tempStr.Add('<p>'+vopros[I]);
 end;


Лишние begin..end. Не красиво выглядит.

Код


righ:string;


Не понятно почему string. Судя по тем значениям. которые этой переменной присваиваются тут вполне хватило бы char.
Код


try
x:=DataModule1.ClientDataSet1.RecNo;
DataModule1.ClientDataSet1.First;
DataModule1.ClientDataSet1.Edit;
DataModule1.ClientDataSet1.Fields[4].AsString:=edtNameQuestion.Text;
DataModule1.ClientDataSet1.Post;
DataModule1.ClientDataSet1.RecNo:=x;
except
end;



Вот это есть не хорошо. Гасить ошибку... 

Код


  if ffEdit='' then
   begin
    CreateBase;
   end


Опять лишние... Не красиво читается.




Ну вроде бы все... Переписывай код с учетом всех замечаний и выкладывай сюда. Будем смотреть smile 

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.