Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: CL | DM;

Вниз

Вопрос про корректность кода.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
3-60064
Smashich
2003-05-28 13:55
2003.06.19
TrbMakeTextHalcyonLink


1-60215
BDRON
2003-06-05 14:46
2003.06.19
Эмуляция нажатия сочетания клавиш


14-60385
comintegrator
2003-06-02 23:14
2003.06.19
ШИФРОВАНИЕ


11-60103
liho26
2002-09-26 13:06
2003.06.19
KOL and D-7


1-60147
Shluz
2003-06-06 14:36
2003.06.19
Окна