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

Поиск:

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


Бывалый
*


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

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



Хотел тоже высказаться, но после K&R остается только дабавить : Аминь!

Цитата(SaDFromSpb @  16.12.2006,  07:07 Найти цитируемый пост)
(Хотя кто в наши времена начинает с asm'а? =) 

 smile Ну, вот он я!
Хотя не знаю, 10-15 лет назад - это можно еще относить к нашим временам? smile 

Цитата(SaDFromSpb @  16.12.2006,  07:07 Найти цитируемый пост)
Если начинать прогать с asm'а =), то отказ от оператора goto сперва покажется чем-то диким, наверное.

В этом плане у меня довольно интересный опыт: после ассемблера я перешел на FoxPro. В виду полного отсутствия операторов перехода, мне пришлось поневоле от них отказаться. После ассемблера с его десятками операторов перехода, отсутствие их в Фоксе поначалу приводило в ступор. Так что имеется опыт как интенсивого использования операторов перехода, так и полного отказа от них.

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

Что, собственно, я этим хотел сказать? Да ровно то, что уже сказали Керниган и Ричи: оператор можно использовать, но если это действительно нужно.
PM MAIL   Вверх
Kirill89
Дата 17.12.2006, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я может быть немного не по теме, но как например в visual basic без goto обойтись? например on error goto <метка>.


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


Эксперт
****


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

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



А при чем здесь форум С++ ?
PM MAIL ICQ   Вверх
Kirill89
Дата 18.12.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Anikmar @  17.12.2006,  23:41 Найти цитируемый пост)
А при чем здесь форум С++ ? 

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


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


Новичок
***
Награды: 1



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

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



bel_nikita

Вот это действительно аминь...  


Anikmar
Kirill89

Вероятно автор топика имел в виду использование оператора в программах c/cpp. Хотя кто его знает smile


--------------------
PM MAIL ICQ Skype   Вверх
Voldemar2004
Дата 18.12.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Kirill89 @  17.12.2006,  18:17 Найти цитируемый пост)
как например в visual basic без goto обойтись? например on error goto <метка>.
Цитата(UniBomb @  18.12.2006,  14:31 Найти цитируемый пост)
Вероятно автор топика имел в виду использование оператора в программах c/cpp. Хотя кто его знает 
 smile Имхо, всегда goto можно избежать при грамотном подходе, даже в ущерб производительности, зато решение будет красивее.

А в VB 
Код
on error goto <метка>
 - стандрат языка, причем очень удобный.





--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Anikmar
Дата 18.12.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Voldemar2004 @ 18.12.2006,  13:38)
 smile Имхо, всегда goto можно избежать при грамотном подходе, даже в ущерб производительности, зато решение будет красивее.


И наоборот. С goto иногда получается красивее и быстрее.

Блин, я тоже в этот баян втянулся...  smile 

Я в своем проекте использую goto целых 3 раза и не собираюсь ничего выдумывать, чтобы его от туда вымарать - он там логично сидит, никому не мешает, ничего не нарушает, а городить хренову тучу отступов и скобок не вижу смысла. Тем более использовать throw... Нормальный оператор. Расширяет возможности языка. 

Все лежит на совести программера. Как говорится с дури и х... сломать можно.

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


Новичок
***
Награды: 1



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

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



Anikmar

Вот! Вот оно!! Всё таки есть те, кто считает нормальным использовать оператор и те, кто считает это злом...

кстати, отсюда следует правило - хороший баян заразителен smile

Это сообщение отредактировал(а) UniBomb - 19.12.2006, 00:13


--------------------
PM MAIL ICQ Skype   Вверх
SergeCpp
Дата 20.12.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


 
**


Профиль
Группа: Участник
Сообщений: 955
Регистрация: 8.8.2005
Где: At Home

Репутация: 15
Всего: 124



Пожалуй, будет интересен некий исторический экскурс в тему

Вот с такой вот стороны

user posted image
user posted image

И вот с такой вот

Structured Programming with go to Statements. Donald Ervin Knuth (PDF in 2.9 M)

user posted image

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



я использовал goto всего 2 раза в жизни:
1 раз в программе на С, там это к месту было...
2 раз в программе на паскале, курсе эдак на первом))

Добавлено через 1 минуту и 27 секунд
вообще считаю что можно, но не больше одного goto на ф-ю, иначе код читать станет невозможно...
PM MAIL Skype GTalk   Вверх
SaDFromSpb
Дата 20.12.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zabivator @  16.12.2006,  17:08 Найти цитируемый пост)
Читал тему, с кем-то согласен, с кем-то не очень.
Один момент! Вот представьте себе, что идет обход дерева через рекурсивный вызов метода...допустим, для поиска определенного элемента. Использование goto либо кидание исключения мне кажется куда более гуманным, чем традиционные методы. 

Если ты обходишь дерево для поиска элемента, то его нахождение должно быть как раз естественным завершением всей рекурсии...

В Java вообще оператора goto нет. (Хотя слово goto зарезервировано - использовать его нельзя). Посправшивайте в ветке о Java на сколько сильно они от этого страдают  smile 

ЗЫ. Ну нифига вы бородатую тему подняли из праха  =)



--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
zkv
Дата 20.12.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

Репутация: 26
Всего: 92



Цитата(Lazin @  20.12.2007,  15:01 Найти цитируемый пост)
но не больше одного goto на ф-ю, иначе код читать станет невозможно... 

может не более одного label'a? 
Код

int F( int x )
{
//...
  if( xz1 )
    goto l_Error;
//...
  if( xz2 )
    goto l_Error;
//...
  return Ok;
//...
 l_Error:
  //обработка
 return Error;
}

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(zkv @  20.12.2007,  15:20 Найти цитируемый пост)
может не более одного label'a? 

ага
так как логику работы этого
Код

int F( int x )
{
 l_begin:
//...
  if( xz1 )
    goto l_Error;
//...
  if( xz2 )
    goto l_begin;
//...
  return Ok;
//...
 l_Error:
  //обработка
 return Error;
}

уже не переварить
PM MAIL Skype GTalk   Вверх
Cycle
Дата 21.12.2007, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А исключения это уже сложно? Люди стараются придумывают замену goto для вас, а вы... smile
PM MAIL   Вверх
MAKCim
Дата 21.12.2007, 00:31 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



goto - вещь полезная и во многих случаях оправдана
очень полезна в управлении ресурсами в структурных языках типа С
здесь возможна замена goto функциями, но код будет менее эффективен и логичен
долой предрассудки!  smile

Добавлено через 1 минуту и 6 секунд
Цитата(Cycle @  21.12.2007,  00:17 Найти цитируемый пост)
А исключения это уже сложно?

не всегда оправдано
исключения - крайне тяжеловесный механизм
для прикладной логики самое то, но для критичных участков не подойдет


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Страницы: (6) Все « Первая ... 2 3 [4] 5 6 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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