![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как оптимизировать кусок кода? [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. выложил бы живой код - поформатировал бы автоформатом, а так мучайся сам :)