
16.11.2012, 11:54
|
 |
Модератор
|
|
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
|
|
Вот рабочий метод из софтины которую я сейчас пишу. Используется куча Exit'ов, вполне нормальный код, ИМХО. Ничего криминального я тут не вижу.
Код:
function TTestThread.CheckLoops: Boolean;
{$DEFINE new_alg}
{.$DEFINE old_alg}
const
LoopWait = 5000;
LoopsState:array [1..3,1..2] of Boolean =
(
(True,False),(False,True),(True,True)
);
var
Points:Integer;
i: Integer;
begin
AddToLog('Вход в процедуру CheckLoops');
Result:=False;
if not (Loop1(False) and Loop2(False)) then
begin
AddToLog('Ошибка управления шлейфами.');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
Sleep(LoopWait);
//Залить настройку
if not WriteSettingForLoops then
begin
AddToLog('Ошибка настройки шлейфов');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
Points:=GetPoint;
if Points<0 then
begin
AddToLog('Ошибка пролучения значения +point');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
//Сформировать события
for i := Low(LoopsState) to High(LoopsState) do
begin
if not (Loop1(LoopsState[i,1]) and Loop2(LoopsState[i,2])) then
begin
AddToLog('Ошибка управления шлейфами.');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
Inc(Points);
if i=3 then
Inc(Points);
Sleep(LoopWait);
{$IFDEF new_alg}
if not (Loop1(False) and Loop2(False)) then
begin
AddToLog('Ошибка управления шлейфами.');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
{$ENDIF}
if not CheckPointsCount(Points) then
begin
AddToLog('Текущее состояние истории не соответствует ожидаемому');
FTestResult.LoopsTests[i]:=False;
end
else
begin
FTestResult.LoopsTests[i]:=True;
AddToLog(Format('Для состояния шлейфов [%s,%s] тест прошел успешно',[BoolToStr(LoopsState[i,1]),BoolToStr(LoopsState[i,2])]));
end;
{$IFDEF old_alg}
if not (Loop1(False) and Loop2(False)) then
begin
AddToLog('Ошибка управления шлейфами.');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
{$ENDIF}
Sleep(LoopWait);
end;
//Очистить настройки шлейфов
if not ClearSettingsForLoops then
begin
AddToLog('Ошибка очистки настроек шлейфов');
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
Exit;
end;
Result:=True;
AddToLog(Format('Выход из процедуры CheckLoops, с результатом %s',[BoolToStr(Result,True)]));
end;
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.
Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
|