TEvg-2> Это хорошая идея. Как и GOTO / JMP
Над таким програмистом можно сразу обряд экзорцизма проводить
GOTO еще как то терпим если у вас десятки - сотни строк кода. Но когда у вас проект на многие тысячи строк кода и тем более - когда над ним работают несколько программистов, то GOTO быстро превращает код в нечитабельный и неотлаживаемый ужас. GOTO не дробит код, не формирует интерфейсов, мешает чтению и пониманию кода. Это ужасный оператор, практически экзистенциальное зло.
Глобальные переменные несколько менее ужасны и иногда все же оправданы, как необходимое зло, но их использование следует минимизировать и использовать только когда без них вообще никак. Хороший код - он как подводная лодка, разбитая на отсеки: если что случилось, то топит только один отсек и дальше проблемы не распространяются. Соответственно определяешь, какой отсек топит, и чинишь только его, не парясь над тем, что происходит в соседних. Процедура - это отсек. Это должен быть максимально автономный и независимый от происходящего в других процедурах код. А глобальные переменные - это как открытые люки и клапаны на межотсечных переборках. Это проводник неожиданных неявных зависимостей между процедурами, которые очень сложно контролировать программисту. Ты ожидаешь одного поведения от функции, а она неожиданно ведет себя иначе. Почему? Да потому что она использует глобальную переменную, а эту же глобальную переменную какая-то совсем другая процедура установила в неожиданное для тебя значение, причем когда ты писал ту процедуру, ты о той процедуре, что уйдет в сбой и не думал. Никогда не сталкивался с подобными ошибками? Причем их еще и отловить очень сложно, потому что при частичной отладке они не видны, нужно отлаживать весь код целиком. А уж если у тебя используются асинхронные вызовы, то работа с глобальными переменными становится вообще очень грустной.
Поэтому хорошей практикой считается минимизация области видимости переменных. Ввел переменную - по возможности она должна быть внутренней переменной метода. Только если не получается, она становится внутренней переменной объекта. Не получается - полем объекта. И только если ну никак иначе - глобальной переменной модуля.
Есть такая книга Стив Макконел "Совершенный код". Практически библия. Почитай на досуге. Очень много подобных вещей в доходчивой форме там разъясняется. Код изначально надо писать с учетом того, как это будет проверяться, отлаживаться и модифицироваться. Это окупается в итоге, т.к. дополнительные затраты времени на тестирование плохого кода и вылавливание из него ошибок превышают время потраченное на то, чтобы сразу написать код по-человечески
TEvg-2> Процедура - это call + ret, плюс дергание стека. Поэтому не нужно увлекаться дроблением процедур.
На современных процессорах и при современных размерах памяти персональных компьютеров об этих вещах можно не париться: быстродействия за глаза. Да и компиляторы многое оптимизируют. Поэтому чаще все же стараются оптимизировать читабельность и легкость тестирования и модификации кода, чем быстродействие ценой минимизации вызова процедур. Обычно узкими местами в быстродействии программ на сегодня являются сложные вычисления, работа с большими объемами данных или обращение к удаленным ресурсам по сети, но никак не вызовы процедур в коде