Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
7-60447
kalishenko
2003-04-14 16:59
2003.06.19
Компоненты


3-60074
vlv
2003-05-28 14:05
2003.06.19
Проблемы с использованием ADO в сервисном приложении.


6-60299
Zheka
2003-04-18 12:01
2003.06.19
Передача данных с досовской машины на Виндовозную


14-60357
Star
2003-06-02 15:12
2003.06.19
Как узнать путь к EXE-шнику установленного приложения


1-60235
bkv
2003-06-03 15:05
2003.06.19
Необходимо из сервиса вызвать программу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский