Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Вниз

Как оптимизировать кусок кода?   Найти похожие ветки 

 
harisma ©   (2011-03-10 14:10) [0]

Получился у меня следующий код:

procedure .....(DoApply: Boolean);
var
 LDelMeanFields, LRequestUserConfirm, LUserConfirmDeleteMeanFields: Boolean;
begin
...
 LRequestUserConfirm := True;
 LUserConfirmDeleteMeanFields := False;
 LDelMeanFields := TCDictEngine(FCDEngine).ISide.COptions.GetSrvVarParam(keyDeSave, prmDelMeanFld, varBoolean, False); (считываем флаг из реестра)
 for i := 0 to FIntf.Count - 1 do
 begin
   ICMTC := FIntf[i] as ICMTCDesigner;
   Application.ProcessMessages;
   if LDelMeanFields then
   begin
     if DoApply then
     begin
       if LRequestUserConfirm then
       begin
         if ICMTC.HasDeletedFields then <- Получаем информацию, есть ли у понятия удаленные поля
         begin
           LUserConfirmDeleteMeanFields := TCDictEngine(FCDEngine).ISide.MessageDlg2(cmsgMeanHasDeletedFields, Integer(mtConfirmation), VarArrayOf([mbYes, mbNo]), Integer(mbNo)) = Integer(mbYes);
           LRequestUserConfirm := False;
           if LUserConfirmDeleteMeanFields then
             ICMTC.Method1
           else
             ICMTC.Method2;
         end
         else
           ICMTC.Method1;
       end
       else
         if ICMTC.HasDeletedFields then
           if LUserConfirmDeleteMeanFields then
             ICMTC.Method1
           else
             ICMTC.Method2
         else
           ICMTC.Method1;
     end
     else
       ICMTC.Method2;
   end
   else
     if DoApply then
       ICMTC.Method1
     else
       ICMTC.Method2;
 end;
end;

Можно ли как то его оптимизировать?


 
Дмитрий Белькевич   (2011-03-10 21:30) [1]

Для начала:



if LRequestUserConfirm and ICMTC.HasDeletedFields then
begin
LUserConfirmDeleteMeanFields := TCDictEngine(FCDEngine).ISide.MessageDlg2(cmsgMeanHasDeletedFields, Integer(mtConfirmation), VarArrayOf([mbYes, mbNo]), Integer(mbNo)) = Integer(mbYes);
LRequestUserConfirm := False;
end;
if ICMTC.HasDeletedFields then
begin
if LUserConfirmDeleteMeanFields then
ICMTC.Method1
else
ICMTC.Method2;
end
else
ICMTC.Method1;
end
end
else
ICMTC.Method2;


p.s. выложил бы живой код - поформатировал бы автоформатом, а так мучайся сам :)


 
Cobalt ©   (2011-03-14 10:32) [2]

Можно просто расписыать, от каких значений(входные параметры) зависят наши действия (результат функции)
например (для двух параметров):
HasDeletedFields(вход1)  LUserConfirmDeleteMeanFields(вход2) Вызвать метод:(результат)
0 0 Method1
0 1 Method1
1 0 Method2
1 1 Method1

Соответственно, пишем логическую функцию:
if HasDeletedFields and not LUserConfirmDeleteMeanFields then
Method2
else
Method1



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.003 c
15-1298842202
Юрий
2011-02-28 00:30
2011.06.19
С днем рождения ! 28 февраля 2011 понедельник


2-1299929528
mefodiy
2011-03-12 14:32
2011.06.19
Ввод со сканера штрих-кодов


15-1298680305
KilkennyCat
2011-02-26 03:31
2011.06.19
Никсовая сборка-роутер?


15-1298035148
Palladin
2011-02-18 16:19
2011.06.19
Почему у Спока


1-1257256989
Igorishe
2009-11-03 17:03
2011.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский