Информация об изменениях

Сообщение Re[6]: Обращение к процедуре несколькими уровнями выше от 10.11.2018 8:17

Изменено 10.11.2018 8:19 Khimik

Re[6]: Обращение к процедуре несколькими уровнями выше
GIV>А теперь надо из другой фукции позвать твое чудо, а она внезапно void или String возвращает.
GIV>Лучше уж возвращать Optional.

Вот ещё пример,когда мне требуется такая возможность. Довольно часто у меня есть функция или процедура, в начале которой инициализируются классы и динамические массивы, а в конце перед выходом освобождаются. Так вот довольно часто в середине этой функции код обнаруживает, что надо поскорее из неё выйти с result := false; Только чтобы из неё выйти, нужно заодно освободить все эти временные классы и массивы. В результате во многих местах функции появляется такой одинаковый код:

  result := false;
  tmpclass.free;
  setlength(tmparray,0);
  exit;


Я подумываю о том, чтобы почаще использовать безусловные переходы: в конце такой функции приведённый код будет стоять под цифрой, и в середине кода переход будет через goto. А так хотелось бы иметь универсальную под-процедуру для выхода из функции:

  procedure ErrExit;
    begin
      result[1] := false;
      tmpclass.free;
      setlength(tmparray,0);
      exit[1];
    end;
Re[6]: Обращение к процедуре несколькими уровнями выше
GIV>А теперь надо из другой фукции позвать твое чудо, а она внезапно void или String возвращает.
GIV>Лучше уж возвращать Optional.

Вот ещё пример,когда мне требуется такая возможность. Довольно часто у меня есть функция или процедура, в начале которой инициализируются классы и динамические массивы, а в конце перед выходом освобождаются. Так вот довольно часто в середине этой функции код обнаруживает, что надо поскорее из неё выйти с result := false; Только чтобы из неё выйти, нужно заодно освободить все эти временные классы и массивы. В результате во многих местах функции появляется такой одинаковый код:

  result := false;
  tmpclass.free;
  setlength(tmparray,0);
  exit;


Я подумываю о том, чтобы почаще использовать безусловные переходы: в конце такой функции приведённый код будет стоять под цифрой, и в середине кода переход будет через goto. А так хотелось бы иметь универсальную под-процедуру для выхода из функции:

  procedure ErrExit;
    begin
      tmpclass.free;
      setlength(tmparray,0);
      result[1] := false;
      exit[1];
    end;