![]() |
|
Модераторы: LSD |
![]()
|
|
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 2 Всего: 154 |
Есть ли в этом мире ситуация, когда использование Goto актуально? Можно конечно обойтись без него, и я не помню когда в последний раз его использовал, но наверняка мне думется есть случай, когда решить задачу с помощью этого оператора - наиболее оптимальный выход?
И еще почему даже в таких современных полностью ОО языках, как Java или C# он оставлен? -------------------- |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
А потому, что без Goto - нельзя выжить и прожить в современных условиях
|
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 3 Всего: 48 |
-------------------- Account removed |
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
С тех пор, как я перестал писать на Бейсике (лет 10 назад) у меня такой ситуации не было... :-)))))))))))))) |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 7 Всего: 360 |
GoodBoy, если необходимо быстродействие, то ГОТО бывает нужен.
|
|||
|
||||
| GoodBoy |
|
|||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: нет Всего: 83 |
sergej.z, ну не знаю... Разве что в Ассембллере...
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 7 Всего: 360 |
Вроде мы в той теме обсуждали
|
|||
|
||||
| Sun |
|
|||
|
Account removed ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1611 Регистрация: 14.8.2002 Репутация: 3 Всего: 48 |
Также как и в ядре ОС. -------------------- Account removed |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: нет Всего: 454 |
В BASIC без него никуда:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: нет Всего: 47 |
правильное и грамотное применение goto нынче говорит о проффесионализме
|
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Применение goto:
- Выход из цикла большой вложенности. - Переход к выполнению набора действий по условиям, разбросанным по функции. Пример: при ошибке надо сказать пользователю, что произошла ошибка, освободить ресурсы и выйти из подпрограммы. Проверок на ошибку - несколько штук в этой подпрограмме. Тогда в конец функции помещают метку и за ней эти действия, при ошибке - goto label. В Паскале без этого обойтись можно вложенной функцией, в Си, насколько я знаю, нет. |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
В Java его нет -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 4 Всего: 165 |
Механизм исключений? --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Исклюхения очень неэффективны: 1. Растет размер кода (по крайней мере в Java размещение try-catch-finallы "развернется" в кучу всевозможных проверок - перепроверок и goto в байткоде). 2.Значительно снижается скорость кодa, т.к. при вызове методов из трай -блоков идеt запись дополнительнx параметров на стек. -------------------- |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 4 Всего: 165 |
Хороший код пишется с исключениями Не знаю как у вас в Жабе.. но в плюсах именна так ;) --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Исключения хороши для того, для чего они предназначены: ловить исключительные sитуации. Но в любом языке (и в сиппипи) брошнный иксепшн означает (неэффективную) размотку sтекa; а потому ими пользоваться нужnо в меру. goto был бы быстрее, хотя я считаю без негo в языках высокого уговня легкo можнo обойтись. -------------------- |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Java:
http://www.javaperformancetuning.com/tips/rawtips.shtml Throwing/catching exceptions are tremendously expensive. C++ http://www.informit.com/guides/content.asp...plus&seqNum=112 -------------------- |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Для этого не нужны goto, а break/continue с меткой.
Не читабельный код, говорю по опыту раскапывания старого QVB(диалект VB) кода. Сколько себя помню goto не использовал -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Sardar, для небольших ф-ций вполне читабельный.
Это понятно, но в БОЛЬШОЙ вложенности тебе придётся делать кучу проверок для этих меток. |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Для небольших методов goto и не нужен -------------------- |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 4 Всего: 165 |
Domestic Cat
А читабельность кода? На мой взгляд, удобнее читать код с исключениями чем заниматься сексом с goto'ами... --------------------
|
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
"Небольшой" понятие относительное. Я имею в виду нормальную функцию длиной в 2-3 экрана. Потом, что значит "нечитабельный"? Насколько я знаю, goto сейчас применяется только для тех целей, которые я указал (99%).Стало быть, если нет цикла, то... В общем, структура кода достаточна очевидна. Однако, здесь дело каждого, как и что использовать. Мне лично немного непонятен лозунг "программирование без goto!!!". Почему без него? И с ним можно делать красивый код, только злоупотреблять не надо, как и везде. Что, скажете, из цикла тройной-четверной вложенности вы выйдете красивее и понятнее при помощи доп. перепенных и break-ов? Да никогда |
|||
|
||||
| Girder |
|
|||
![]() Лентяй 2 ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1993 Регистрация: 12.5.2004 Репутация: нет Всего: 155 |
PS: А без лекарства - можно "ласты склеить" Это сообщение отредактировал(а) Girder - 24.12.2004, 16:01 -------------------- Как слышим, так и пишим. Истина где-то там... |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
ну это само собой а вообще я не помню чтобы я пользовался иксепшнами (как и goto) для переходов куда либо.
не всякий код с goto будет нечитабельным, но goto стимулирует написание такогo кода. при правильном пользовании goto можеt быть удобен, но будет ли приятно чи тать код поперемеченный лейбелами вдоль и поперек? все что может goto можно сделать другими средствами; возможно в некоторых (0.001%) ситуация такой код будет неуклюжим по сравнению с goto, но зато в остальных - будет понятнее. -------------------- |
||||
|
|||||
| dm9 |
|
||||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Заметь, об этом никто не говорил
Вот! И я о чём! |
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
все равно - в Java его нет и я нe разу о нем нe вспомнил -------------------- |
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Не понял про проверки. Гото это универсальный оператор перехода куда угодно(возможно ограничение: только внутри функции). break/continue с меткой имеет однозначное значение: окончить/продолжить заданный цикл. По любому компилятор сгенерит гото в конец или начало цикла, вместо того что бы ты сделал это сам. Я за goto, но что бы компилятор выдавал warning'и и обкладывал трёхступенчатым не отключаемым матом всех, кто захочет его использовать
Я тоже -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 4 Всего: 165 |
Зато с исключениями гораздо логичнее заметь ;) --------------------
|
||||
|
|||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Вот stubborn
Без них еще логичнее -------------------- |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Что-то я тебя не понял. Что такое goto я знаю Я думал, ты хочешь выйти из цикла по break, но это выход из внутреннего цикла. Перед этим мы ставим флаг, и точно так же по break выходим из второго цикла. По этому же флагу - из третьего. А что ты имел в виду под "break/continue с меткой"? Может, мы про разные языки? |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
В Java возможна например такая конструкция:
Вот это и имелось в виду -------------------- |
||||
|
|||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Прикольно
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
dm9 это логичнее, так как ты просто помечаешь цикл из которого хочешь потом выйти. Когда узнал чт в Сях этого нет, сильно удивился...
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Да, в современных языках делается всё, чтобы сделать ненужным применение goto
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 7 Всего: 360 |
Да, но вот в сях её нет... поэтому там нужен GOTO
А так конечно прекрасная вещь, эти labels |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 4 Всего: 165 |
И никаких goto Это сообщение отредактировал(а) chipset - 19.1.2005, 16:00 --------------------
|
||||
|
|||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Добавлено @ 16:52 Если говорить про строго структурированное программирование, тогда к лозунгу "нет goto" можно добавить "нет break-ам, halt-ам, exit-ам, continue-сам". Что там ещё? |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 4 Всего: 172 |
Брейки и continue - довольно слабая замена goto, для циклов, где пришлось бы иначе добавлять лишние проверки Чаще всего их легко отследить и проблем они не вызывают. Екзит прерывает выполнение программы, потому вопросов там вообще нет. А вот goto может применяться и в других целях.
-------------------- |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
ПРИВЕДИТЕ ПРИМЕР ПРОГРАММЫ НА ПАСКАЛЕ ИЛИ DELPHI, в которой НЕЛЬЗЯ обойтись без GOTO!!!
Любой GOTO может быть заменен: циклом, дополнительным условием в цикле, выбором... |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Pakshin A. S., что доказывается в курсе дискретной математики...
Вот только вопрос не в том, что можно, а в том, что удобно. Я могу привести как минимум один случай на Паскале и два на Си, когда GoTo удобен. Вернее, я уже приводил эти примеры выше. Главное, без фанатизма Добавлено @ 19:37 Вернее, на Паскале тоже два случая, но с горем пополам один можно заменить вложенной функцией... |
|||
|
||||
| Pakshin A. S. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Гы... мне ее (дискретку) как раз 24-ого сдавать...
А ну дай эти случаи... |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
|
|||
|
||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
dm9, на счёт этого у тебя просто "запаянная память" Это всё равно что передавать в таких языках как JS, Ptyhon и подобных обьект функцию, как нормальный обьект, а не указатель как в C/C++ - что есть домысливание(шаблон) программиста. Возможно еще более контрастный пример, зачем нам while? Ведь метка + условный блок(if) + goto делают то же самое, попробуй программисту на асме доказать обратное
Это устаревшая логика/мышление -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| dm9 |
|
||||||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Именно так и читать. "Паскаль" и "Си". Не "С++", не "Delphi", не "Java", не "C#" и так далее. Хотя в том же Delphi покажи мне способ выхода из цикла большой вложенности. Я знаю только один.
Так попроще будет:
Это сообщение отредактировал(а) dm9 - 20.1.2005, 00:46 |
||||||
|
|||||||
| dm9 |
|
||||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Вот, кстати, о чём я говорил (обработка ошибок).
Пришлось сегодня глянуть на исходник regsvr... Обратить внимание на строчки
Имхо, достаточно красиво
|
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
dm9 порой людей исправляет только могила
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
Это ты обо что? -------------------- Да. Именно так. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Не хотел обидеть -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
Понятно. На самом деле я сторонник goto в вышепреведённой ситуации. И только в ней Там использовать исключения было бы нелогично. Так как они уж больно громоздки (не в смысле исходного кода, а в смысле выполнения). -------------------- Да. Именно так. |
|||
|
||||
![]()
|
| Правила ведения Религиозных войн | |
|
|
1. Уважайте собеседника 2. Собеседник != враг 3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez" С уважением, Smartov. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Религиозные войны | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |