И вот через пару дней обезьяны уже все поняли про этот банан и даже смотреть на него перестали. Тогда ученые одну обезьяну из клетки выселили а вместо нее другую заселили. Она банан увидела и хотела за ним полезть, но обезьяны очень умные и заботливые, они все сразу поняли что сейчас эту новенькую обезьяну током ударит, поэтому они ее стали от этого оберегать как умеют: держать, махать руками, даже побили как следует — в общем, все для ее блага сделали, лишь бы ее током не ударило. Очень они заботливые были, добились того, чтобы новая обезьяна к банану не притронулась.
Чувак, goto реально не нужен. Он снижает уровень читаемости кода и не даёт буквально никаких преимуществ. В нормальных языках программирования такого оператора вообще нет, и хорошо.
Я считаю нормальными языками только C++, C и C#, причем последний в меньшей степени. Выходит, во всех нормальных языках есть goto.
Тот самый неловкий момент, когда не знал или напрочь забыл, что во всех этих Сях вообще есть goto, ибо последний раз пользовался им 30 лет назад при написании программ для Спектрума на Бейсике... О_о
А как ты выходишь из вложенных циклов?
Ждем 11-мерный движок для игр со всем что только можно только из goto и if. Банан-то все забыли почему трогать нельзя, может уже самое то начать попытки его съесть. Без функций, разумеется - зачем они?
Я джун, пробую писать всякие интерпретаторы и среды разработки.
И у меня уже возникали моменты, когда без goto никак.
1
for(int i = 0; i < n; i++)
for(int i2 = 0; i2 < n; i2++)
Как выйти сразу из двух и более циклов? Иногда ломаю условие предыдущего цикла, т.е. i2 = n и i = n. Но, когда требуется максимальная производительность, приходится выходит с goto.
2
switch не даёт прыгать на свои кейсы из самого же switch, хотя они - самые обычные метки для прыжка. Это дикость.
Пришлось городить уродство:
switch(n)
case А:
case_а:
код
case Б:
код
case В:
код
goto case_а;
код
case Г...
При этом логика кода никак не давала поставить А ниже В, чтобы можно было просто провалится в него, я пытался.
3
Надо было определить что под курсором. А под ним может быть любой объект, каждый со своим массивом или структурой. Т.е. нельзя просто пройти по одному массиву/структуре.
Сначала перед каждым массивом/структурой стояло "if(объект_не_найден)", но требовалась производительность (поиск идёт всегда при движении курсора), поэтому проходим по всем и при нахождении просто прыгаем на выход, на конец всех поисков.
4
while(true){
switch(n){
case А
case Б
...
}}
Когда кейсов мало, делаю if else вместо switch, чтобы break выводил из while.
Но если их много, то приходится использовать switch и goto, иначе код с кучей if else усложняется для понимания.