Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как оптимизировать кусок кода? [D5]


harisma ©   (2011-03-10 14:10:00) 

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

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;

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


Cobalt   (2011-03-14 10:32:00) [1]

Можно просто расписыать, от каких значений(входные параметры) зависят наши действия (результат функции)
например (для двух параметров):
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


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

Для начала:



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. выложил бы живой код - поформатировал бы автоформатом, а так мучайся сам :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо