Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> так ли страшен goto, как его малюют? за и против goto 
:(
    Опции темы
azesmcar
Дата 13.3.2009, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата

решение в лоб посредством флага не очень красивое и может (в каких то случаях)  помочь лишь смена алгоритма


можно этото избежать с помощью
1. смены алгоритма
2. выделить каждый цикл в функции или реализовать рекурсией (если уж так сильно нужна такая вложенность)
3. как я написал выше
4. используя гото
5. используя исключения

мне кажется любую задачу где возникла необходимость решить с помощью гото, можно решить первыми тремя способами. И они как правило лучше. А исключениями вообще не стоит.

Добавлено @ 15:17
Цитата

Боюсь Вас удивить, но этот тоже :


пора в отпуск... 

Это сообщение отредактировал(а) azesmcar - 13.3.2009, 15:17
PM   Вверх
azesmcar
Дата 13.3.2009, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



про юнион все и забыли  smile 

вот тут нашел дискуссию по этому поводу...
http://forum.shelek.ru/index.php/topic,9852.0.html

давайте сразу и тему в религиозные войны перенесем  smile 
PM   Вверх
mes
Дата 13.3.2009, 15:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(azesmcar @  13.3.2009,  14:14 Найти цитируемый пост)
И они как правило лучше.

"Как правило " это "не всегда". И, как правило, у каждого правила есть исключения..  smile 
Именно поэтому нельзя подходить к вопросу категорично.
Новичков отпугивают от goto, потому что большая вероятность, что он будет его писать везде без разбора,
а если человек понимает всю степень ответственности и сознательно выбрал этот подход, то  наверняка это лучший(по крайней мере не хуже другого) из вариантов.  smile 



--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 13.3.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Ну раз уж модератор выделил в отдельную тему скажу

До сих пор я выражал свое субьективное мнение по данному вопросу smile теперь попробую выразится обьективно.

цитата: Бьерн Страуструп 
Цитата

Вообще говоря, он мало используется в языках высокого уровня, но может быть очень полезен, если текст на С++ создается не человеком, а автоматически, т.е. с помощью программы. Например, операторы goto используются при создании анализатора по заданной грамматике языка с помощью программных средств.

Кроме того, операторы goto могут пригодиться в тех случаях, когда на первый план выходит скорость работы программы. Один из них - когда в реальном времени происходят какие-то вычисления во внутреннем цикле программы.

Есть немногие ситуации и в обычных программах, когда применение goto оправдано. Одна из них - выход из вложенного цикла или переключателя. Дело в том, что оператор break во вложенных циклах или переключателях позволяет перейти только на один уровень выше.


любой оператор в неумелых руках может привести к нечитабельности кода и его неадекватному поведению, если писать правильно то все будет нормально, вопрос только в том что не рекомендуется использовать некоторые операторы и возможности С++, поскольку есть их более безопасные аналоги и можно обойтись и без них. Лично для меня обьективное мнение что гото в некоторых редких случая оправда - не меняет мой взгляд на этот оператор и мое субьективное мнение остается при мне smile Я не то чтобы избегаю, а просто даже ситуации не было чтобы задуматся об его использовании. Кто что скажет?
PM   Вверх
Rififi
Дата 13.3.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: нет
Всего: 36



bsa
Предложи крассивое решение по замене goto без пессимизации кода:
try/catch, longjmp (это жОстко ((: ) ?
PM MAIL   Вверх
bsa
Дата 13.3.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Я только однажды использовал goto, более того, расширение gcc:
Код
static const void *labels[] = { &&label0, &&label1, ..., &&label255 };
...
goto  *labels[idx];
...
label0:
...
label255:
...
Код критичный ко времени исполнения.
PM   Вверх
azesmcar
Дата 13.3.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата

try/catch

рекомендуется использовать только для отлова ошибок. Сатер - Решение новых сложных задач на С++ smile

Добавлено через 3 минуты и 1 секунду
Цитата

Код критичный ко времени исполнения. 


это уже что-то вроде низкоуровнего программирования, тогда чтобы что-то использовать никакие оправдания не нужны smile любые средства хороши. Но я не это имею ввиду. С тем же успехом можно сделать на ассемблере, это не безопасно, это не очень то читабельно, но это быстро потому что так надо smile тут без вопросов, я говорю про обычный код.
PM   Вверх
Albor
Дата 13.3.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 589
Регистрация: 28.2.2009

Репутация: нет
Всего: 9



Цитата(mes @  13.3.2009,  12:30 Найти цитируемый пост)
Да на форумах часто панически обрисовывают знаменитый goto и внушают страх.

Страуструп по этому поводу говорит, что применение goto свидетельствует о том, что плохо продуман алгоритм (неточное цитирование, нет под рукой книги). Поэтому, наверное, такой ажиотаж вокруг этого.

Это сообщение отредактировал(а) Albor - 13.3.2009, 15:57
PM MAIL ICQ   Вверх
azesmcar
Дата 13.3.2009, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



bsa, в случае не очень критичного кода это можно было бы с успехом заменить на

std::map<int, function_ptr> не так ли smile
PM   Вверх
mes
Дата 13.3.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(azesmcar @  13.3.2009,  14:52 Найти цитируемый пост)

std::map<int, function_ptr> не так ли smile 


 а почему не просто массив функций ?  smile 



--------------------
PM MAIL WWW   Вверх
bsa
Дата 13.3.2009, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



Цитата(azesmcar @ 13.3.2009,  15:52)
bsa, в случае не очень критичного кода это можно было бы с успехом заменить на

std::map<int, function_ptr> не так ли smile

нет конечно, я бы заменил на статический массив указателей на функцию, так как "ключи" имеют значения от 0 до 255. Использование map в данном случае, было бы пессимизацией.
PM   Вверх
azesmcar
Дата 13.3.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата

нет конечно, я бы заменил на статический массив указателей на функцию, так как "ключи" имеют значения от 0 до 255. Использование map в данном случае, было бы пессимизацией.


ну я же не знаю какие у тебя значения имели ключи..у меня был случай когда ключи было не очередны, т.е. 1, 10, 50, 143, 354..но я тоже тут использовал статический массив ради констаной скорости поиска..смотря чего нужно добится smile
PM   Вверх
mes
Дата 13.3.2009, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(azesmcar @  13.3.2009,  15:09 Найти цитируемый пост)
ну я же не знаю какие у тебя значения имели ключи..у меня был случай когда ключи было не очередны, т.е. 1, 10, 50, 143, 354..но я тоже тут использовал статический массив ради констаной скорости поиска..смотря чего нужно добится smile 

можно сделать предположение по массиву меток :

Цитата(bsa @  13.3.2009,  14:45 Найти цитируемый пост)
static const void *labels[] = { &&label0, &&label1, ..., &&label255 };


и этот пример (который привел bsa) обсуждался в этой теме :
http://forum.vingrad.ru/forum/topic-208226...tml#st_0_view_0


Это сообщение отредактировал(а) mes - 13.3.2009, 16:11


--------------------
PM MAIL WWW   Вверх
azesmcar
Дата 13.3.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



bsa, кстати, можно было и по другому.

Код

switch (idx)
{
   case 1: ...; break;
   case 2: ...; break;
   case 3: ...; break;
   case 255: ...; break;
}


компилятор 99% преобразует это в таблицу переходов, т.е. в принципе в то что ты написал с помощью гото smile

Добавлено через 1 минуту и 16 секунд
mes, не важно, я сам принцип имел ввиду..

Добавлено через 5 минут и 30 секунд
mes, в теме которую ты прислал - ты сам привел несколько причин по которым использование гото нежелательно..я тоже люблю поспорить, но о чем мы спорим если мы думаем одинаково?  smile 
PM   Вверх
mes
Дата 13.3.2009, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 1
Всего: 250



Цитата(azesmcar @  13.3.2009,  15:14 Найти цитируемый пост)
mes, в теме которую ты прислал - ты сам привел несколько причин по которым использование гото нежелательно

обратите внимание, что и в той теме я не писал об категоричном отказе от goto, а то что у goto много недостатков я и не спорю.  

Цитата(azesmcar @  13.3.2009,  15:14 Найти цитируемый пост)
но о чем мы спорим ...?

о предвзятости и катeгоричности smile
Цитата(azesmcar @  13.3.2009,  15:14 Найти цитируемый пост)
 если мы думаем одинаково?

судя по высказываниям , то если о плохих чертах думаем одинаково, то о хороших чертах goto по разному smile

Цитата(azesmcar @  13.3.2009,  15:14 Найти цитируемый пост)
компилятор 99% преобразует это в таблицу переходов,

не всегда можно/удобно применить такой подход (из за нехватки динамичности)

Это сообщение отредактировал(а) mes - 13.3.2009, 16:37


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.