У меня опять стоит выбор, использовать ли безусловные переходы в коде.
Есть участок кода, в котором выполняется сначала подготовка к циклу, потом цикл, потом завершение цикла. И во всех этих участках программа может определить, что пора выйти из цикла и закончить выполнение этого кода, но перед этим нужно выполнить некоторые действия (например освободить массивы и классы). Я вижу три варианта:
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;
Какой вариант правильнее использовать?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.