Снова о безусловных переходах
От: Khimik  
Дата: 17.07.17 14:40
Оценка:
У меня опять стоит выбор, использовать ли безусловные переходы в коде.
Есть участок кода, в котором выполняется сначала подготовка к циклу, потом цикл, потом завершение цикла. И во всех этих участках программа может определить, что пора выйти из цикла и закончить выполнение этого кода, но перед этим нужно выполнить некоторые действия (например освободить массивы и классы). Я вижу три варианта:
1) В местах, где обнаружено что надо заканчивать процедуру, стоит несколько операторов (одинаковые). Я так делаю довольно часто, и ставлю эти операторы в одну строку – лично мне это кажется удобным. Например, так:

If i>myarray.count-1 then begin myarray.free; exit; end;


2) Использовать безусловный переход:

If i>myarray.count-1 then goto 223;
...
223: myarray.free;


3) Создать отдельную процедуру, по выходе из которой будет выполняться финализация:

procedure Perform;
...
If i>myarray.count-1 then exit;
...
end;

...

begin
perform;
myarray.free;
end;


Какой вариант правильнее использовать?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.