Ваш код в порядке. Это сжато и понятно. Это лучше, чем надувать работу на 50–200% с помощью дополнительных переменных и разных глаголов, которые делают одно и то же.
Если вы просто переходите назад или вперед к началу или концу логического блока, то переходите к нему. «Цикл» или «Конец времени» - это все еще переход, но подразумевается назначение. Единственное преимущество заключается в том, что компилятор не даст вам пересечь две петли, но это невозможно с парой gotos. При использовании goto's не пересекать потоки. Это было бы плохо. - Доктор Шпенглер
Моя другая любимая мозоль - это правило "один вход, один выход". Конечно, у вас может быть только один вход, если вы не пишете на ассемблере. Но правило «одного выхода» глупо. Это просто приводит к куче проверок вложенных границ, которые убирают ваш код с правильного поля. Гораздо понятнее проверить все ваши параметры в начале процедуры и «выйти из подпрограммы», если они недопустимы. Что имеет больше смысла?
if badparam then
log error
exit sub
endif
if badparam2 then
log error2
exit sub
endif
do stuff
или это?
if goodparam then
if goodparam2 then
do stuff
else
log error2
endif
else
log error
endif
Когда у вас есть шесть проверок границ и «материал» - это 60 строк, которые вы не можете разбить на более мелкие части, тогда второй путь превращается в кошмар для тех, кто должен его поддерживать. Лучше закончить то, что вы делали - проверять исключения - чем откладывать всю обработку исключений до конца.
Мои $ 0,02