![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Никогда не использовал и запрет преподавателей на использование оператора воспринимал как должное. Но всё таки интересно, почему не рекомендуется использовать goto в программах? Это чисто эстетические причины или же некорректность в работе оператора?
|
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Это не только эстетические причины. Вообще на эту тема уже столько раз поднималась... воспользуйся поиском.
goto нарушает естественное течение программы, т.е. невызов нужных конструкторов/деструкторов, запутанность программ... Минусов очень много. Средства языка позволяет свободно обходиться без goto. Однозначно false... |
|||
|
||||
INHazeR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.12.2006 Репутация: нет Всего: нет |
Whenever possible, you should avoid using gotos in your program. They tend to encourage very convoluted code that can be extremely difficult to follow.
As the goto is theoretically unnecessary - there's always an alternative approach to using goto - a significant cadre of programmers say you should never use it. I don't subscribe to such an extreme view. It is a legal statement after all, and there are occasions when it can be convenient. However, I do recommend that you only use it where you can see an obvious advantage over other options that are available. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
чушь, что его нельзя использовать
главное использовать с умом и когда это действительно облегчает понимание кода в С++, скорее всего, можно обойтись в большинстве случаев без него, в С много моментов, где его применение оправдано Если есть желание, посмотри исходники ядра Linux - яркий пример любви к goto ![]() Добавлено @ 21:10 JackYF, не согласен с тобой, нельзя быть таким категоричным goto во многих случаях делает код как раз менее запутанным и понятным -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
JackYF,
Поиском воспользовался, но не нашёл темы с аналогичным названием. Возможно эта тема и раскрывалась в топике с другим вопросом, но перелопачивать из все не представляется приятным занятием...
А вот если оператор используется в линейном коде, где нет ни конструкторо/деструкторов и скажем идёт расчёт какой-нибудь системы уравнений, где нельзя однозначно предугадать дальнейшее решение и в этом коде будет проще использовать этот оператор (ну скажем короче, продуктивнее и проще, чем куча ифоф, кейсов, форов и вайлов). В таких случаях тоже низя? INHazeR ну вот, сидеть мне теперь со словарём допозна... Единственное что я понял, что оператор теоретически безопасен (?). MAKCim ![]() Это сообщение отредактировал(а) UniBomb - 14.12.2006, 21:14 |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Короче на сколько я понимаю этот оператор приводит к ошибкам программы
особенно если код большой а так же если кто-то захочет разобрать твою прогу (дизассембл) то участок кода напр: for( ;; ) { .... for( ;; ) { if( x <4 ) goto ass; } } Вроде-бы сведет на нет его понимание но я иногда не брезгую хотя не очень он мне тоже нравится -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
если код станет понятнее - однозначно можно goto, повторюсь, это не табу -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
TaNK |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 669 Регистрация: 29.10.2006 Где: Краснодар Репутация: нет Всего: 1 |
goto необходимо использовать при самой необходимости, например когда невозможно использовать оператор break;
Это сообщение отредактировал(а) TaNK - 14.12.2006, 21:17 -------------------- Oracle 11.2.0.3.0 FireBird 1.0-2.5 |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Unexpected returnvalue 2 from Glimpse - вот ответ на поиск 'goto' в тексте(ссылка Makcim'a). )))
Очень опасно. Особенно в С++. Я лично на С ничего не пишу и не собираюсь. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
UniBomb,
пример чего? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
apook,
Допустим исходники только для твоих глаз, причём очень хорошо закоментирована. |
|||
|
||||
INHazeR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.12.2006 Репутация: нет Всего: нет |
если оператор в языке существует, значит использовать его можно и нужно, если того требует ситуация. другое дело, что я даже гипотетически не могу представить себе ситуацию, когда этот оператор был бы незаменим. гораздо проще и надежнее использовать условия и циклы. ИМХО.
|
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
MAKCim,
Ну... да нет, просто думал есть где-нить под рукой кусок кода, где он действительно оправдан... |
|||
|
||||
MAKCim |
|
||||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Вообще, С++, если разобраться, очень опасный язык Мое имхо, все, что к месту - хорошо, goto в том числе ничего плохого в нем нет Добавлено @ 21:24
просто пример из ядра, не скажу, однако, что тут без goto не обойтись -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||||
|
|||||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Вообщем, я уже 3 года обхожусь без goto.
По сему считаю, что его нужно применять только в случае крайней необходимости. К пример, выход из двойного и даже тройного цикла не считаю такой крайней необходимостью. Это лично мое мнение, никому навязывать не собираюсь. |
|||
|
||||
Gen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 30.7.2006 Репутация: нет Всего: 1 |
Вопрос - а много ли он сжирает ресурсов по сравнению с готозаменяющими циклами??
![]() |
|||
|
||||
INHazeR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.12.2006 Репутация: нет Всего: нет |
гм. как goto может сжирать ресурсы? это же команда
|
|||
|
||||
codelord |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 777 Регистрация: 7.5.2005 Где: ты моя темноглаза я где?! Репутация: 1 Всего: 39 |
в книге K&R об этом уже давно написали.
коротко: ничего криминального, не обязательно, всегда можно обойтись. сам давно уже не пользовался. Хотя когда еще в школе на бейсике то всегда фрагмент K&R
|
|||
|
||||
Gen |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 30.7.2006 Репутация: нет Всего: 1 |
Сформулирую вопрос по другому - целесообразно ли использовать его постоянные вызовы в цикле, если, например, это делает код более читаемым?? |
|||
|
||||
Dray |
|
|||
![]() Материалист ![]() ![]() Профиль Группа: Участник Сообщений: 652 Регистрация: 7.10.2003 Где: г. Всеволожск Репутация: 2 Всего: 6 |
Ну раз так, почему нет? Если побочных эффектов не вылезет, - используй. |
|||
|
||||
witex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 0 Всего: 4 |
goto ваабще смысла нету использовать.
Использование функций всегда заменяет goto. Тем более что использоване функций, делает значимо читабильным код, чем с goto --------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
call != jmp -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
witex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 0 Всего: 4 |
понятно дело, что так и есть! Но я встречал столько кадров которые пытались заменить функции оператором goto
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
к чему тогда
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
UniBomb,
ИМХО Оператор "goto" нельзя использовать по той же самой причине по какой в Советском Союзе нельзя было ездить на одном рельсе. /ИМХО Это сообщение отредактировал(а) GrayCardinal - 14.12.2006, 22:50 |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Про goto - это боян , который появился пожалуй сразу с появлением языков высокого уровня. О нем спорили и спорить будут
![]() ![]() Если вкратце , то моя позиция такая ( хотя я goto не юзал года 3 уже) : Если на тебе резиновые сапоги, то зачем обходить три квартала, чтобы не промочить ноги? ЗЫ Когда создавался ЯП Ада ( признаный самым продуманным ЯП ) , то шли долгие дискуссии на эту тематику и в результате goto все же было включить в него ![]() Добавлено @ 22:03 GrayCardinal, слишком громкое заявление. имхо. С другой стороны я пожалуй соглашусь с Void , который говорил , что goto при правильном проектировании просто не нужен. Отсутствие goto должно стать для программиста не целью , а результатом накопления им опыта ) Это сообщение отредактировал(а) nikitao - 14.12.2006, 22:08 -------------------- Жизнь - печальная штука. |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
nikitao,
Так ясно что ИМХО, или дописать ? ![]() |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Извени , не уверен , что вопрос понял ![]() ![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
nikitao,
Так нормалек ? Добавлено @ 23:00 ЗЫ А будем обсуждать можно ли использовать обе ? ![]() ![]() ![]() |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
nikitao,
Ты опять таки возвращаешся к вопросу об эстетики, имхо программиста меньше всего должно беспокоить наличие оператора (если это конечно не приводит к ошибке) goto. Прочтя все высказывания я понял одно - программиста от "кулхацкера" отличает как раз ниличие или отсутвие goto в коде их программ. С этой же точки зрения можно забанить функцию ReadFileEx, когда есть такая замечательная функция ReadFile (это просто пример, взял первые попавшие на ум похожие функции). А то что такие программы трудно читать - это проблемы того, кто читает (хотя я всё таки за "правила хорошего тона" и стараюсь писать удобочитаемый код). Моё ИМХО - если оператор или функция не вызывает ошибки, то её нужно использовать эти операторы или функции в случае максимального комфорта... Gen, Dray, к слову - а что значат картинки у вас в подписях? |
|||
|
||||
apook |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 794 Регистрация: 12.7.2006 Репутация: 9 Всего: 23 |
Вот статья как Умные дядьки изгнали GOTO из одного языка
Это сообщение отредактировал(а) apook - 14.12.2006, 23:53 Присоединённый файл ( Кол-во скачиваний: 20 ) ![]() -------------------- Мои руки из дуба, голова из свинца ну и пусть ... |
|||
|
||||
nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Жесть.. ![]() GrayCardinal, ![]() -------------------- Жизнь - печальная штука. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
nikitao,
Спасение утопающик - дело рук самих утопающих (или как то так...). Программа может быть написана грамотно и умно, но и без goto нечитабельна... И вообще, читай предложение целиком и не придирайся к отдельной фразе... |
|||
|
||||
Rockie |
|
||||||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Это если теоретически написать программу ![]() как насчет тегов кода, запятых и полных слов? =) С примером согласен.
согласен, выход из таких циклов - imho пожалуй единственное оправдание этому оператору, и то с натяжкой ![]()
UniBomb, могут стать твои, если тебя уволят ![]() imho программиста от кулхацкера отличает наличие или отсутствие уважения к коллегам, которые твой код смотрят и с ним работают. Программа может быть написана грамотно и умно с точки зрения того, кто ее писал и быть абсолютным г@#;ом для остальных. И дело тут не в goto а в отношении. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||||||||
|
|||||||||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Rockie,
Опять таки всё зависит от точки зрения. Но сабж пошёл не в то русло, поэтому, прекращая флуд, последнее слово пусть остаётся за тобой. |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 24 Всего: 92 |
В C даже сомнения нету. Если не извращаться, а осмысленно использовать, то это нормальный и естественный оператор, который не только усложняет восприятие кода, но и упрощает его. В плюсах - лучше воздержаться. Есть множество альтернатив, а goto в плюсах всё же не безопасен.
|
|||
|
||||
UnrealMan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
||||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
касательно невызывания конструкторов/деструкторов при использовании goto
это не свсем так: если с помощью goto происходит выход из области видимости объекта, его деструктор вызывается в то же время не допускается использование goto, которое приводит к пропуску конструкторов P.S. не то, чтобы я за него агитировал, но и лишнего ему приписывать не надо ![]() -------------------- qqq |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
||||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Что касается меня, то с тех пор, как препод нам давным давно сказал, что goto - это от дьявола, и что использующий его да будет гореть в геене огненной, так ни разу им и не воспользовался. Считаю, что код можно сделать красивым и удобочитаемым без оператора goto, уж по крайней мере в С++.
По поводу ядра линукс: его пишут особые люди с особым складом программистского ума =). Если начинать прогать с asm'а =), то отказ от оператора goto сперва покажется чем-то диким, наверное. (Хотя кто в наши времена начинает с asm'а? =) ) Эта тема, действительно, может превратиться в долгий флуд, и я не стал бы сюда постить, если бы не вспомнил про одну интересную статейку, в которой представляется чудесный способ избавления от трудных мест в алгоритме со многочисленными ветвлениями и "внезапными" выходами по среди тел воложенных циклов. Алгоритм преобразует алгоритм Эта статья, я думаю, будет особо полезна тем, кто считает, что в некоторых случаях goto - панацея. П.С.: Прошу заметить, что ярым противником goto не являюсь. Хотя был бы неприятно удивлен увидеть его в коде матерого прикладного приложения, написанного на оо языке. Когда он действительно вреден, так это когда его используют начинающие, вместо того, чтобы лучше продумать заковыристый кусок алгоритма. Это сообщение отредактировал(а) SaDFromSpb - 15.12.2006, 23:18 -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
UnrealMan |
|
||||||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Не наверное, а точно:
Пропуску любой инициализации вообще:
Вот-вот. Это сообщение отредактировал(а) UnrealMan - 16.12.2006, 11:53 |
||||||||||
|
|||||||||||
FelikZ |
|
|||
![]() Старый Маразматик ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 1.12.2006 Где: Vault 13 Репутация: нет Всего: 5 |
По-моему в малом количестве в некоторых специфических задачах
вполне можно употреблять без всяких сомнений... -------------------- ![]() |
|||
|
||||
zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
Читал тему, с кем-то согласен, с кем-то не очень.
Один момент! Вот представьте себе, что идет обход дерева через рекурсивный вызов метода...допустим, для поиска определенного элемента. Использование goto либо кидание исключения мне кажется куда более гуманным, чем традиционные методы. --------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
по мне так goto - зло для человека, который читает чужой(большой) код, особенно если goto кидает куда-нить за пределы видимой страницы.. натерпелся с этими метками в асме, в С\С++ ни разу не использовал(надеюсь и не буду) и живу нормально..
![]() P.S народ че случилось с аватарами некоторых участников, я народ путаю.. ![]() |
|||
|
||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
считаю наоборот ![]() ![]() З.Ы.: Если профессор на лекциях говорит студентам, что goto - от дьявола, правду говорит, дабы уберечь молодой организм от злоупотребления и заставить задуматься над проектированием. Но потом, через пару лет, при определенных обстоятельствах, вы вспомните о всемогущем goto и все же используете его... но это уже будет не зеленый студент, а зрелый программист ![]() |
|||
|
||||
AlexPro |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 9.11.2005 Где: Санкт-Петербург Репутация: 1 Всего: 4 |
Хотел тоже высказаться, но после K&R остается только дабавить : Аминь!
![]() Хотя не знаю, 10-15 лет назад - это можно еще относить к нашим временам? ![]()
В этом плане у меня довольно интересный опыт: после ассемблера я перешел на FoxPro. В виду полного отсутствия операторов перехода, мне пришлось поневоле от них отказаться. После ассемблера с его десятками операторов перехода, отсутствие их в Фоксе поначалу приводило в ступор. Так что имеется опыт как интенсивого использования операторов перехода, так и полного отказа от них. В проекте, над которым я сейчас работаю (20К строк) оператор goto используется ровно пять раз. Каждое его использование обусловлено соображениями производительности и (или) читаемости кода (т.е. использование оператора приводило к упрощению кода). Везде операторы и метки перехода находятся в пределах одного экрана. Что, собственно, я этим хотел сказать? Да ровно то, что уже сказали Керниган и Ричи: оператор можно использовать, но если это действительно нужно. |
|||
|
||||
Kirill89 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Я может быть немного не по теме, но как например в visual basic без goto обойтись? например on error goto <метка>.
|
|||
|
||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
А при чем здесь форум С++ ?
|
|||
|
||||
Kirill89 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
я и говорю, немного не по теме. просто это можно сказать довод в пользу goto, ведь речь шла об операторе, а не языке... |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
bel_nikita,
Вот это действительно аминь... Anikmar, Kirill89, Вероятно автор топика имел в виду использование оператора в программах c/cpp. Хотя кто его знает ![]() |
|||
|
||||
Voldemar2004 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: нет Всего: 23 |
![]() А в VB
-------------------- i_i (';') (V) ![]() |
||||||
|
|||||||
Anikmar |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2513 Регистрация: 26.11.2006 Где: Санкт-Петербург Репутация: 9 Всего: 59 |
И наоборот. С goto иногда получается красивее и быстрее. Блин, я тоже в этот баян втянулся... ![]() Я в своем проекте использую goto целых 3 раза и не собираюсь ничего выдумывать, чтобы его от туда вымарать - он там логично сидит, никому не мешает, ничего не нарушает, а городить хренову тучу отступов и скобок не вижу смысла. Тем более использовать throw... Нормальный оператор. Расширяет возможности языка. Все лежит на совести программера. Как говорится с дури и х... сломать можно. |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: 2 Всего: 97 |
Anikmar,
Вот! Вот оно!! Всё таки есть те, кто считает нормальным использовать оператор и те, кто считает это злом... кстати, отсюда следует правило - хороший баян заразителен ![]() Это сообщение отредактировал(а) UniBomb - 19.12.2006, 00:13 |
|||
|
||||
SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Пожалуй, будет интересен некий исторический экскурс в тему
Вот с такой вот стороны ![]() ![]() И вот с такой вот Structured Programming with go to Statements. Donald Ervin Knuth (PDF in 2.9 M) ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
я использовал goto всего 2 раза в жизни:
1 раз в программе на С, там это к месту было... 2 раз в программе на паскале, курсе эдак на первом)) Добавлено через 1 минуту и 27 секунд вообще считаю что можно, но не больше одного goto на ф-ю, иначе код читать станет невозможно... |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Если ты обходишь дерево для поиска элемента, то его нахождение должно быть как раз естественным завершением всей рекурсии... В Java вообще оператора goto нет. (Хотя слово goto зарезервировано - использовать его нельзя). Посправшивайте в ветке о Java на сколько сильно они от этого страдают ![]() ЗЫ. Ну нифига вы бородатую тему подняли из праха =) -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
||||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ага так как логику работы этого
уже не переварить |
|||
|
||||
Cycle |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.12.2007 Репутация: 3 Всего: 3 |
А исключения это уже сложно? Люди стараются придумывают замену goto для вас, а вы...
![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
goto - вещь полезная и во многих случаях оправдана
очень полезна в управлении ресурсами в структурных языках типа С здесь возможна замена goto функциями, но код будет менее эффективен и логичен долой предрассудки! ![]() Добавлено через 1 минуту и 6 секунд не всегда оправдано исключения - крайне тяжеловесный механизм для прикладной логики самое то, но для критичных участков не подойдет -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
sgrey |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 15.4.2006 Репутация: нет Всего: 4 |
если goto не нарушает естественного хода программы (т.е. нет скачков вверх кода) то вполне можно его использовать, конечно же с умом и не пихать везде где можно... особенно учитывая что практически в любом случае можно обойтись и без него...
|
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Вообще то не рекомендуется, ну например так:
Файл insn-recog.c из gcc |
||||
|
|||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Это сгенерированный код. В сгенерированном коде читабельность занимает последнее место. имхо. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Проблема в том, что иногда ТАК пишут и руками - вот для таких 'умельцев' и запрещают пользоваться goto. Нормальный вменяемый программист пользуется goto только там, где это действительно надо (т.е. почти нигде ![]() |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
на ядро Linux посмотрите по вашим словам получается, что его шизофреники пишут ![]() еще раз говорю, долой предрассудки если уж на то пошло, то нет таких ситуаций, где "это действительно надо" все можно переписать без goto но с goto очень часто понятнее, быстрее и логичнее Это сообщение отредактировал(а) MAKCim - 21.12.2007, 23:44 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
SaDFromSpb |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Не только поэтому. Исключения - это только для исключительных ситуаций. Уж лучше использовать goto, вместо того чтобы использовать исключения, как элемент логики программы при ее нормальной работе. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
goto в подавляющем большинстве случаев используется именно как средство управления ресурсами в исключительных ситуациях я, честно говоря, не видел, чтобы где-нибудь исключения использовались не для исключительных ситуаций ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
я у страуса видел ![]() имхо в большинстве случаев можно переписать код без гоуту и при этом в читабельность только вырастет... Хотя иногда без этого нельзя. У меня оператор goto появлялся только в очень больших функциях(неправильно спроектированных) ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Lazin, а у меня оператор goto появляется только там, где я это запроектировал. В частности, в функции с таблицей переходов (расширение gcc - позволяет преобразование void* к метке и обратно).
|
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 2 Всего: 58 |
Народ, имейте совесть, что значит "нельзя использовать" оператор, который есть по стандарту в языке ? Не хочешь - не используй. Всё.
Это сообщение отредактировал(а) GrayCardinal - 24.12.2007, 14:17 |
|||
|
||||
Albanec |
|
|||
Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 1.12.2007 Репутация: нет Всего: нет |
По мне дак оператор готу ето как одна из возможностей реализовать свою идею, и я скажу противникакм данного оператора что не стоит брызгая слюной арать что применение данного оператора не есть хорошо и что его применение приведет всех в ад))) По моему ето бред,
После создания нескольких програм на ассемблере, я понимаю что кроме оператора goto нету ни одного оператора который бы его заменил(в смысле на низком уровне прогрммирования), так что все операторы похожи на goto(просто в машином языке(ассемблер)нету других операторов), приведите мне хоть один низкоуровневый оператор типа if() я вам памятник поставлю)). И скажите мне зачем его вводят во всех языках программирования если он "НЕ НУЖЕН ИЛИ БЕЗ НЕГО МОЖНО ОБОЙТИСЬ"???? А на сечёт читаемости кода, полностью согласен читается трудно, но после некоторого опыта программирования на ассемблере ето детские сказки)) Вообщем моё мнеие такое если использовать данный оператор то только если: без него не обоитись, или он улутшит читаемость кода. Но не в коем случае нельзя ставить крест на даном операторе)) надо его использовать с умом)) |
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
-------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
nerezus |
|
||||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
P.S. иног да бывает нужен. например при кодировании математического алгоритма, где описание основано на шагах с очень сложной связью. |
||||
|
|||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
В яве реализован выход из вложенных циклов. goto там уже нет. не помню чтоб кому то из за этого приходилось страдать.
![]() -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Mayk,
логика, которую можно описать табличными переходами внутри функции
компилятор GCC Это сообщение отредактировал(а) MAKCim - 1.1.2008, 11:00 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
|
|||
|
||||
SaDFromSpb |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 5.4.2006 Где: Санкт-Петербург Репутация: 3 Всего: 3 |
Хы хы. У нас реализован алгоритм Хука-Дживса. Гоуту не используется. Хотя я еще уточню у автора, когда он подойдет. -------------------- "За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001) |
|||
|
||||
nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 3 Всего: 43 |
У меня он тоже без goto.
Просто читаемость ухудшается ) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |