Показать сообщение отдельно
  #12  
Старый 16.11.2012, 11:54
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 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;
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием