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

Поиск:

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


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


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

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



Цитата(Anikmar @  13.3.2009,  10:56 Найти цитируемый пост)
опять в голове навязчивый goto  smile

Да на форумах часто панически обрисовывают знаменитый goto и внушают страх.
И его "навязчивость" появляется из за "страха" использования, а ничего страшного в нем нет.
Просто в современных языках есть средства безопаснее и лучше, по сравнению с которыми конструкция с goto  выглядит мягко сказать ущербной.

В общем случае goto также как и  union применим тогда, когда остальные средства бессильны. 

P.S. Правда  пока не приходилось встречаться с ситуацией (в Cpp), где хотя бы вспомнилось о goto, не говоря о появлении желания его использования.

Модератор: тема выделена из union

Это сообщение отредактировал(а) bsa - 13.3.2009, 15:31


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


uploading...
****


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

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



mes, ну почему же? о проблемах гото в чуть ли не в каждой книге говорится...зачем же ставить его на одну полку с union?
PM   Вверх
Anikmar
Дата 13.3.2009, 13:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

azesmcar 
о проблемах гото в чуть ли не в каждой книге говорится


У goto нет проблем. Он сам по себе. Проблемы могут быть только у программиста  smile 

На самом деле если задаться целью, то можно обойтись без любой конструкции языка. Вот только оно надо? Мне не было нужды использовать union, но это вовсе не значит, что я его сознательно избегаю. Если он мне понадобится - буду пользовать. Главное знать, что такое есть.
PM MAIL ICQ   Вверх
azesmcar
Дата 13.3.2009, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата

У goto нет проблем. Он сам по себе. Проблемы могут быть только у программиста  smile 


если у программиста в следствии использования гото будут проблемы он скорее всего удалит гото и напишите что нибудь получше, следовательно проблемы будут у гото..его просто напросто удалят (прервут его жалкое существование). А это уже проблема ;)
PM   Вверх
azesmcar
Дата 13.3.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата

А насчет одной полки Вы правы - union гораздо опаснее и требует большей ответственности и знаний  smile


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


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


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

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



Цитата(azesmcar @  13.3.2009,  13:01 Найти цитируемый пост)
еслиб я знал что в моей группе кто-то из программистов написал гото, независимо ни от чего я бы бил его головой об бэкспейс 

Вы предвзяты! "били" бы только за то что использовали стандартный оператор ?!! smile   нда... 

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


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


Эксперт
***


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

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



Ребята, вы че-то завернули не туда куда-то от темы, да еще и заморочились  smile  


--------------------

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


uploading...
****


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

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



Цитата

Вы предвзяты! били бы только за то что использовали стандартный оператор ?!! smile   нда... 


ну я бы не стал воспринимать все так буквально  smile уже оффтоп пошел
PM   Вверх
bsa
Дата 13.3.2009, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(azesmcar @ 13.3.2009,  14:01)
 smile ну как сказать, еслиб я знал что в моей группе кто-то из программистов написал гото, независимо ни от чего я бы бил его головой об бэкспейс smile

Предложи крассивое решение по замене goto без пессимизации кода:
Код
for(int i = 0; i < 1000; ++i) {
   ...
   while(condition) {
       ...
       if (some_case)
          goto end_of_cycles;
       ...
   }
   ...
}
end_of_cycles:;

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


uploading...
****


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

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



так

Код

bool some_case = false;
for(int i = 0; i < 1000 && !some_case; ++i) {
   ...
   while(condition && !some_case) {
       ...
       some_case = some_condition;
       ...
   }
   ...
}
end_of_cycles:;


или так...

Код

bool some_case = false;
for(int i = 0; i < 1000 && !some_case; ++i) {
   ...
   while(condition) {
       ...
       some_case = some_condition;
       if (some_case)
          break;
       ...
   }
   ...
}
end_of_cycles:;


непонял что имеется ввиду под

Цитата

без пессимизации кода

может это считается пессимизацией, но по моему все равно лучше писать так чем гото smile

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


Эксперт
***


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

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



в данном случае гото лучше - 100%.
мне не нравится гото, когда назад он кидает, а когда вперед, очень даже ничего...


--------------------

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


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


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

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



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

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


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


uploading...
****


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

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



кстати вот этот код вылетит при запуске.

Код

int main()
{
    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < 10; ++j)
        {
            if ( i % j == 0 )
            {
                goto endofcycle;
            }
        }
    }
    endofcycle:
    return 0;
}


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

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


пятиуровневые циклы и из каждого возможно нужно прекратить все..немного надуманно, но я бы такое решил с помощью функций..
PM   Вверх
Dmi3ev
Дата 13.3.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



и между кодом bsa и azesmcar я бы равно не поставил  smile  


--------------------

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


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


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

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



Цитата(azesmcar @  13.3.2009,  14:01 Найти цитируемый пост)
кстати вот этот код вылетит при запуске.
Код


    
int main()
{
    for (int i = 0; i < 10; ++i)
    {
        for (int j = 0; j < 10; ++j)
        {
            if ( i % j == 0 )
            {
                goto endofcycle;
            }
        }
    }
    endofcycle:
    return 0;
}




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


    for (int i = 0; i < 10; ++i)
        for (int j = 0; j < 10; ++j)
            if ( i % j == 0 ) break;

и при чем здесь тогда goto  ?!


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


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

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

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


 




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


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

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