Форум: "Потрепаться";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];
ВнизВопрос про корректность кода. Найти похожие ветки
← →
Fredericco (2003-06-03 17:47) [0]Привет всем мастерам.
Я всерьез занялся оптимизацией своего кода.
Вопрос такой, как корректнее?
Так
procedure MyProc;
begin
if ... then begin
...
Exit;
end;
if ... then begin
...
Exit;
end;
if ... then begin
...
Exit;
end;
end;
или так
procedure MyProc;
begin
if ... then begin
...
end Else if ... then begin
...
end Else if ... then begin
...
end;
end;
Кому не затруднительно напишите ответ.
С глубочайшим уважением Fredericco.
← →
Mike B. (2003-06-03 17:51) [1]Что значит корректнее в даннном случае?
← →
DVM (2003-06-03 17:54) [2]а CASE там не подойдет?
← →
kull (2003-06-03 17:55) [3]Мне кажется - 2 вариант...
Вообще такие команды как, Exit и Break, желательно использовать в крайних случаях. Противоречит это принципам структурного программирования....
← →
Ru (2003-06-03 17:55) [4]в первом случае end для каждого begin сохраняется чтоб компилятор не ругался, а exit вообще выглядит лишним, по моему.
← →
Юрий Зотов (2003-06-03 17:56) [5]Э-э-э, елы-палы! Да разве в этом оптимизация-то? Это же копейки, не с них надо начинать.
← →
Fredericco (2003-06-03 17:56) [6]1) Какой код будет выполнятся быстрее.
2) Не влияет ли процедура Exit на читабельность кода.
3) Какой из двух типов ты обычно используешь сам, я доверяю твоему опыту.
← →
Mike B. (2003-06-03 17:57) [7]С одной стороны kull © прав, и возможно, вместе с DVM © (03.06.03 17:54) еще больше :) но с другой мы же не знаем, что там внутри этих ифов. Мне кажется, тут общего случая быть не может
← →
Fredericco (2003-06-03 17:59) [8]Юрий Зотов © (03.06.03 17:56)
Да вроде как больше уже нечего :-)
← →
Mike B. (2003-06-03 18:00) [9]Если так навскидку сказат я бы написал case, но опять-таки см. Mike B. © (03.06.03 17:57) кто его знает, что у тебя там
← →
Fredericco (2003-06-03 18:03) [10]2 DVM © (03.06.03 17:54)
CASE - подойдет.
А имеет ли смысл? Я просто не знаю.
2 Ru © (03.06.03 17:55)
Ставлю что бы остальной участок кода не отрабатывался. Нужно ли?
2 Mike B. © (03.06.03 17:57)
Приблизительно следующее.
b:=False;
for i:=0 to Txt.Count-1 do begin
b:=CheckAddr(Txt.Strings[i]);
if b then Break;
end;
if b then Txt.Add(Chr(5)+Client[GetClientNum(sh)].Driver.Group+":"+Client[GetClientNum(sh)].Driver.Code);
if Txt.Count>=4 then begin
SendTextToHandle(HandleII,Txt.Text,SType);
ExSH:=-1;
TranslateCom(Txt.Text,sh,-1,SType);
if (Client[GetClientNum(sh)].Driver.Group="10")
and (Client[GetClientNum(sh)].Driver.Code="1")
then ExSH:=sh;
Txt.Insert(1,"1");
Txt.Insert(1,"10");
TranslateCom(Txt.Text,sh,ExSH,SType);
end;
← →
Юрий Зотов (2003-06-03 18:04) [11]> Fredericco © (03.06.03 17:59)
> Да вроде как больше уже нечего
Если бы я мог сказать такое о своих программах, я был бы счастлив.
← →
Ihor Osov'yak (2003-06-03 18:05) [12]в общем случае отдаю предпочтение варианту один.. И дело тут не в оптимизации или отсутствии иной - см. ЮЗ. Имхо, это более читабельно.
зы - а вообще-то есть подозрение, что для этих разных вариантов компилятор построит одинаковый код.. Проверять самому - влом..
← →
DVM (2003-06-03 18:05) [13]
> Fredericco © (03.06.03 18:03)
>CASE - подойдет.
> А имеет ли смысл? Я просто не знаю.
Ну так используй. По моему гораздо читабельнее и короче будет. По скорости тоже самое или такие мизерные отличия, что забудь.
← →
Mike B. (2003-06-03 18:06) [14]ну вот тебе раз
← →
DVM (2003-06-03 18:07) [15]Лучше варианты в цепочке выстроить в порядке вероятности появления. Тут можно получить выигрыш.
← →
Fredericco (2003-06-03 18:09) [16]2 Юрий Зотов © (03.06.03 18:04)
Я не так выразился.
Просто я гонял программу в течении суток, на отдельном компьютере, на предмет утечек памяти. Потом решил код оптимизировать. Шел по тексту программы с верху вниз, натыкался на кусок, который можно и по-другому написать. Отдельно проверял все варианты - брал наилучший. И вот дошел до этого кода. Действительно, внизу и верху от этого места еще много всего нехорошего. Просто я пока остановил свой поиск. :-)
← →
Fredericco (2003-06-03 18:10) [17]2 DVM © (03.06.03 18:07)
:-)
← →
Fredericco (2003-06-03 18:11) [18]Ребят, извините: нужно срочно бежать домой.
Спасибо за ответы!
Надеюсь завтра продолжим!!!
С уважением Fredericco.
← →
NetBreaker666 (2003-06-03 18:27) [19]Скорость выполнения одинаковая, там где используется exit - больше размер кода (на 2 байта (ret n) на каждый exit (или на 6-8, если там jmp стоит)).
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.06.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c