Это удобно, пока Вам не приспичит изменить код так, чтобы выполнить не одну функцию, а например две. Тогда весь кусок перекраивать придется. Во втором варианте стиль не меняется, а просто дописывается еще один вызов. Очень помогает, когда хочется быстро вставить печать отладочного сообщения (а то и по одному в каждой скобке, чтоб понять условие ветвления), а потом так же быстро его удалить.
А если Вы делаете return изнутри цикла?
Или даже из пары вложенных циклов? Тут break (который по сути тот же goto к концу цикла) уже не поможет — он сработает на один цикл (хотя вроде поминалось, что в java можно и из вложенных выходить — но тогда опять же goto к концу внешнего цикла).
Так что goto иногда все-таки удобно.
Но не спорю, лучше бы его поменьше, и такие if'ы не писать.
Не всегда, все зависит от реальных условий. Я собственно хотел показать только то, что при множетвенном ветвлении и куче return goto улучшает и читаемость, и отлаживаемость кода.
Это очень неплохо описано в замечательной книжке Алена Голуба, в русском переводе она называется «Правила программирования на С и С++» — перечитывал несколько раз, и хоть кое-что устарело, с чем-то не согласен — но вцелом это супер, каждый, кто хочет писать более-менее грамотный, читаемый и отлаживаемый код — должен ее прочитать. На просторах интернет ее можно найти например тут
запустить ssh, в кавычках указать запустить греп у которого в кавычках написать регексп с кавычками… и т.д. приходилось такое писать и еще специальную функцию, которая каждый раз эскейпила кавычки… вот это было весело отлаживать, до сих пор мурашки по коже.
Кстати, не стоит забывать, что сейчас вместо init.d появился Upstart и systemd — оно позволяет значительно ускорить загрузку системы. А init.d наверно скоро уйдет в /dev/null
«Источники РИА Новости отмечают, что „Гео-ИК-2“ может впоследствии быть переведен на расчетную орбиту, несмотря на отклонения при выведении на орбиту. „
Нет, ясное дело, что менять никто и не будет. Но тогда вопрос — зачем так много вариантов?
Конечно мы все хотим новое, и это интересно. Новая система, новые идеи. Прогресс.
Но тогда вместо написания кода по сути мы только и занимаемся девелопментом систем, которые якобы улучшают поддержку кода (да, наверно это так).
А сам код в это время никто не пишет.
PS. В жизни от перехода с CVS на SVN толку почти не было, а гимора хватило — новый репозиторий, конвертация, переучивание человеков… Единственный плюс — копирование комментариев при move/merge. Но это раз в год…
например перловый undef не есть NaN в чистом виде, там undef вполне определенное значение… (ой, а может оно тоже последние биты теряет… в ядро не лазил, сорри)
а для полезности перловиков, да и не только их — используйте Big Int для денег и их копеек — оно разряды не теряет ибо их нет.
У нас есть кучка замечательных систем
CVS
SVN
GIT
…
…
А надо столько?
И это еще ладно, каждый использует свое… но их все больше и больше. Как же жить дальше? Менять систему каждый год?
А если использовать параллельно несколько репозитариев?
Ой мама, страшненько.
У Sun с ораклом было что делить — оракл же на java фактически все свои девелоперские и клиентские тулзы написал. А с микрософтом что? Они свое решение перли и прут — тут чистая конкуренция, никто никого из них не купит.
Прочитал «Китайцы создали вирус, блокирующий связь кл» и фразы на экране просто не увидел. Первое, что подумалось — «блокирующий связь клеток… организма». А потом появилась мысль — что это вирусы то в одно место влезут, то еще куда. Нет чтобы влазить во все связи между нейронами (все загрузки .dll), во все коннекты системы (http, ftp, mail). Такой супер-умный все-блокирующий вирус. Скорее даже не блокирующий, а встраивающийся во все связи — а там уже что хошь то и делай, с ftp отправляй на http, с одной dll на другую… тут простор для фантазии — хоть фракталы рисуй — вот он, искусственный интеллект :)
Если много завязок — всегда сложно. Но тогда встает вопрос — а кто от кого зависеть будет, если Гугл перепишет код под себя, а Ораклу останется только плеваться, что используют уже не его код, с свободный Гугловый? А если так подумать, то Java писалась как раз для программирования всяких микроконтроллеров, а совсем не серверных и десктопных приложений.
Или даже из пары вложенных циклов? Тут break (который по сути тот же goto к концу цикла) уже не поможет — он сработает на один цикл (хотя вроде поминалось, что в java можно и из вложенных выходить — но тогда опять же goto к концу внешнего цикла).
Так что goto иногда все-таки удобно.
Но не спорю, лучше бы его поменьше, и такие if'ы не писать.
Это очень неплохо описано в замечательной книжке Алена Голуба, в русском переводе она называется «Правила программирования на С и С++» — перечитывал несколько раз, и хоть кое-что устарело, с чем-то не согласен — но вцелом это супер, каждый, кто хочет писать более-менее грамотный, читаемый и отлаживаемый код — должен ее прочитать. На просторах интернет ее можно найти например тут
if (a) {
...
...
return 1;
}
if (b) {
...
...
return 2;
}
...
повторить 15 раз в том же духе
Представляете как это отлаживать, сколько дебага вставить надо перед каждым return?
Не проще ли именно с точки зрения поддержки и сопровождения кода писать как минимум
if (что-то) {
result = 1;
goto Exit;
}
if (что-то еще) {
result = 2;
goto Exit;
}
...
повторить много раз
...
: Exit
write_debug("Result: " + result);
return result;
Сколько нервов съэкономит этот goto… хотя одно наличие подобного кода уже убивает.
Хотя если ты поставишь cygwin, то очень большая вероятность, что вместо PS будешь использовать bash ;)
Конечно мы все хотим новое, и это интересно. Новая система, новые идеи. Прогресс.
Но тогда вместо написания кода по сути мы только и занимаемся девелопментом систем, которые якобы улучшают поддержку кода (да, наверно это так).
А сам код в это время никто не пишет.
PS. В жизни от перехода с CVS на SVN толку почти не было, а гимора хватило — новый репозиторий, конвертация, переучивание человеков… Единственный плюс — копирование комментариев при move/merge. Но это раз в год…
например перловый undef не есть NaN в чистом виде, там undef вполне определенное значение… (ой, а может оно тоже последние биты теряет… в ядро не лазил, сорри)
а для полезности перловиков, да и не только их — используйте Big Int для денег и их копеек — оно разряды не теряет ибо их нет.
CVS
SVN
GIT
…
…
А надо столько?
И это еще ладно, каждый использует свое… но их все больше и больше. Как же жить дальше? Менять систему каждый год?
А если использовать параллельно несколько репозитариев?
Ой мама, страшненько.