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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.008 c
15-1298958622
Гость
2011-03-01 08:50
2011.06.19
Как саботировать работы?


15-1298669393
Юрий
2011-02-26 00:29
2011.06.19
С днем рождения ! 26 февраля 2011 суббота


15-1299015000
Юрий
2011-03-02 00:30
2011.06.19
С днем рождения ! 2 марта 2011 среда


2-1299768007
harisma
2011-03-10 17:40
2011.06.19
Слияние двух стринглистов


2-1299837557
i7
2011-03-11 12:59
2011.06.19
Как избавиться от ошибок сокетов