Re: Как выйти сразу из нескольких циклов?
От: okman Беларусь https://searchinform.ru/
Дата: 13.10.10 13:45
Оценка: 6 (1) -2 :))) :)))
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

Исключения.
Re: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 13.10.10 12:56
Оценка: 3 (3) +5
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

По goto за конец цикла и не страдать.

Ещё можно вложенные циклы в отдельный метод завернуть и выходить из него по return. Некоторым иногда кажется, что так лучше.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: Как выйти сразу из нескольких циклов?
От: okman Беларусь https://searchinform.ru/
Дата: 13.10.10 14:12
Оценка: 1 (1) +3 -1 :))
Здравствуйте, Brutalix, Вы писали:

B>О, мьсе понимает толк в извращениях!


Извращение — писать большущие конструкции с вложенными циклами,
а потом думать как из них вылезти.
Re: Как выйти сразу из нескольких циклов?
От: blackhearted Украина  
Дата: 13.10.10 12:58
Оценка: 11 (2) +2 :)
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

Священную войну начать решилась?

Сначала поиск тут засветились многие знаменитые тролли
Автор: LeonGorbachev
Дата: 27.05.02
Re: Как выйти сразу из нескольких циклов?
От: MasterZiv СССР  
Дата: 14.10.10 09:30
Оценка: 2 (2) +2
On 13.10.2010 16:55, XJess wrote:
Как Вы бы вышли сразу из нескольких
> циклов? Мне приходят в голову два варианта — с помощью опять же goto или
> флагами.

return !
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Как выйти сразу из нескольких циклов?
От: Brutalix  
Дата: 13.10.10 14:07
Оценка: 1 (1) +3
Здравствуйте, okman, Вы писали:

O>Исключения.


О, мьсе понимает толк в извращениях!
Re[4]: Как выйти сразу из нескольких циклов?
От: blackhearted Украина  
Дата: 13.10.10 14:04
Оценка: +4
Здравствуйте, los puercos, Вы писали:

LP>>>3) использовать goto и быстро выпить йаду

B>>А вас switch не смущает?
LP>Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command

ПГМ ?
PS П == паттернизм.
Re: Как выйти сразу из нескольких циклов?
От: chrisevans  
Дата: 18.10.10 15:20
Оценка: 18 (1) :))
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

1. Сохранить текущее состояние в файл.
2. Перезагрузить компьютер.
3. Запустить программу при загрузке ОС.
4. Восстановить состояние из сохраненного файла.
Re[5]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 13.10.10 14:10
Оценка: 2 (1) +2
Здравствуйте, blackhearted, Вы писали:

B>ПГМ ?

B>PS П == паттернизм.

По-русски это называется "шаблонное мышление"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Как выйти сразу из нескольких циклов?
От: Nik_1 Россия  
Дата: 18.10.10 10:21
Оценка: +1 -2
Здравствуйте, IROV.., Вы писали:
IRO>да я гдето видел написаный на ООП "Hello World"
IRO>не кажеться что всему свое место? и не стоит все под одно "чисать"

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

class CMyApp : public CApp
{
public:
  virtual int Run()
  {
    console.print("Hello World");
    return 0
  };
};

че внем такого ужасного
Re[4]: Как выйти сразу из нескольких циклов?
От: Brutalix  
Дата: 13.10.10 22:37
Оценка: :))
Здравствуйте, March_rabbit, Вы писали:

M_>кстати, смех смехом, но разок я именно так и сделал. Не для выхода из циклов, а для реализации длинного и тупого алгоритма, в котором ошибка на каждом шаге приводила к завершению работы процедуры. Просто return не прокатывал, потому как надо было выполнить еще пару действий. Решил не плодить дерева if-ов, а сделать линейный алгоритм с выходом по исключениям.


А почему не сделать так:


int длинный_и_тупой_алгоритм() {

    тупые_вычисления_1();
    if (шит_хаппен) goto приехали;

    тупые_вычисления_2();
    if (шит_хаппен) goto приехали;

    тупые_вычисления_3();
    if (шит_хаппен) goto приехали;

    тупые_вычисления_4();
    if (шит_хаппен) goto приехали;

    тупые_вычисления_5();
    if (шит_хаппен) goto приехали;

    усё_в_упорядке();

приехали:
    return 0;
}


?
Re: Как выйти сразу из нескольких циклов?
От: IROV..  
Дата: 16.10.10 21:57
Оценка: -1 :)
Здравствуйте, XJess, Вы писали:

#    define FOR_EACH2( type, i, j, i_begin, i_end, j_begin, j_end )\
    if( j_begin != j_end ) for( type i = i_begin, j = j_begin; i != i_end? true: (++j != j_end? i = i_begin, true : false); ++i )


    FOR_EACH2( int, i,j, 0,10,0,10)
    {
        printf("%d,%d\n",i,j);
    }


писать циклы вот так )))
я не волшебник, я только учусь!
Re[5]: Как выйти сразу из нескольких циклов?
От: March_rabbit  
Дата: 20.10.10 10:27
Оценка: -1 :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, March_rabbit, Вы писали:


B>>>О, мьсе понимает толк в извращениях!

M_>>кстати, смех смехом, но разок я именно так и сделал. Не для выхода из циклов, а для реализации длинного и тупого алгоритма, в котором ошибка на каждом шаге приводила к завершению работы процедуры. Просто return не прокатывал, потому как надо было выполнить еще пару действий. Решил не плодить дерева if-ов, а сделать линейный алгоритм с выходом по исключениям.

E>
E>длинный_и_тупой_алгоритм()
E>{
E>    ПараВействийПередВыходомДелатель doNotForgetDoIt;
E>    тупое_действие_возможно_содержащее_return_1();
E>    тупое_действие_возможно_содержащее_return_2();
E>    тупое_действие_возможно_содержащее_return_3();
E>    тупое_действие_возможно_содержащее_return_4();
E>    тупое_действие_возможно_содержащее_return_5();
E>    doNotForgetDoIt.Спасибо_ничего_не_надо();
E>}

1. убрать скобки за тупыми действиями, а то return никуда не выйдет
2. убрать метод "Спасибо_ничего_не_надо" и перенести его контент в деструктор класса ПараВействийПередВыходомДелатель (чтобы само делалось)

3. часть логики выпадает из места, где она имеет какой-то смысл.
4. трудности с локальными переменными
Re[2]: Как выйти сразу из нескольких циклов?
От: Brutalix  
Дата: 13.10.10 14:06
Оценка: +1
Здравствуйте, Erop, Вы писали:

E>По goto за конец цикла и не страдать.


Re[4]: Как выйти сразу из нескольких циклов?
От: los puercos  
Дата: 13.10.10 19:20
Оценка: :)
Здравствуйте, los puercos, Вы писали:

LP>>>3) использовать goto и быстро выпить йаду

B>>А вас switch не смущает?
LP>Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command

Господа, у вас плохо с ч/ю. Кто не понял — это был такой толстый сарказм.
switch — это прекрасно, пока их не становится 2, 3 и так далее для обработки одной и той же последовательности кейсов.
А вот goto must die
Автор: IT
Дата: 08.06.02
Re[6]: Как выйти сразу из нескольких циклов?
От: los puercos  
Дата: 14.10.10 11:55
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, blackhearted, Вы писали:


B>>ПГМ ?

B>>PS П == паттернизм.

E>По-русски это называется "шаблонное мышление"


А кто сказал, что "шаблонное мышление" — это плохо?
Хинт: стремление применять шаблоны там где можно и нельзя шаблонным мышлением не является.
Re[6]: Как выйти сразу из нескольких циклов?
От: rusted Беларусь  
Дата: 20.10.10 11:17
Оценка: +1
Здравствуйте, March_rabbit, Вы писали:

M_>2. убрать метод "Спасибо_ничего_не_надо" и перенести его контент в деструктор класса ПараВействийПередВыходомДелатель (чтобы само делалось)


Я так понимаю, что Спасибо_ничего_не_надо — это как раз сигнал того, что в деструкторе ничего не надо делать. Т.е. в случае ошибки и return-а из середины функции деструктор как раз все что нужно сделать при ошибке сделает, а в случае успешного выхода эти дейсвия не нужны и Спасибо_ничего_не_надо просто выставляет соответсвующий флаг.
Re[5]: Как выйти сразу из нескольких циклов?
От: okman Беларусь https://searchinform.ru/
Дата: 21.10.10 08:40
Оценка: +1
Здравствуйте, Vain.
Вы писали:

V>Месье знает как писать без вложенных циклов?


Что-то не припомню, когда в последний раз мне понадобилась конструкция с вложенными циклами.
Один в другом — бывает иногда, но все равно редко. И выход из них обычно с помощью return.
Но Вы не забывайте — тема про извращения.
Re[7]: Как выйти сразу из нескольких циклов?
От: okman Беларусь https://searchinform.ru/
Дата: 21.10.10 10:43
Оценка: :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, okman, Вы писали:


O>>Что-то не припомню, когда в последний раз мне понадобилась конструкция с вложенными циклами.

O>>Один в другом — бывает иногда, но все равно редко. И выход из них обычно с помощью return.

E>От задач очень зависит...


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

На первый раз можно goto или даже throw обойтись (с пониманием того что делаешь и к чему это приведет).
Ну а дальше — или пересаживаться на ассемблер, где jmp не так порицается, как его затравленные
высокоуровневые аналоги, или временно завязать с кодингом и вернуться к чтению классики и перфокартам.
Как выйти сразу из нескольких циклов?
От: XJess  
Дата: 13.10.10 12:55
Оценка:
Привет всем!
Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?
Re: Как выйти сразу из нескольких циклов?
От: los puercos  
Дата: 13.10.10 13:55
Оценка:
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

1) throw
2) оформить логику циклов как отдельную функцию, и выйти по return
3) использовать goto и быстро выпить йаду
Re[2]: Как выйти сразу из нескольких циклов?
От: blackhearted Украина  
Дата: 13.10.10 13:57
Оценка:
Здравствуйте, los puercos, Вы писали:

LP>Здравствуйте, XJess, Вы писали:


XJ>>Привет всем!

XJ>>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

LP>1) throw

А тут не пить ядок?
LP>2) оформить логику циклов как отдельную функцию, и выйти по return
Тут тоже яду не нужно?
LP>3) использовать goto и быстро выпить йаду
А вас switch не смущает?
Re[3]: Как выйти сразу из нескольких циклов?
От: los puercos  
Дата: 13.10.10 14:02
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>Здравствуйте, los puercos, Вы писали:


LP>>Здравствуйте, XJess, Вы писали:


XJ>>>Привет всем!

XJ>>>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

LP>>1) throw

B>А тут не пить ядок?
Разве что немного. Не самое лучшее решение, привел "за компанию"

LP>>2) оформить логику циклов как отдельную функцию, и выйти по return

B>Тут тоже яду не нужно?
Нет, тут не нужно. Можно йогурт.

LP>>3) использовать goto и быстро выпить йаду

B>А вас switch не смущает?
Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command
Re[3]: Как выйти сразу из нескольких циклов?
От: March_rabbit  
Дата: 13.10.10 14:16
Оценка:
Здравствуйте, Brutalix, Вы писали:

B>Здравствуйте, okman, Вы писали:


O>>Исключения.


B>О, мьсе понимает толк в извращениях!

кстати, смех смехом, но разок я именно так и сделал. Не для выхода из циклов, а для реализации длинного и тупого алгоритма, в котором ошибка на каждом шаге приводила к завершению работы процедуры. Просто return не прокатывал, потому как надо было выполнить еще пару действий. Решил не плодить дерева if-ов, а сделать линейный алгоритм с выходом по исключениям.
Re[4]: Как выйти сразу из нескольких циклов?
От: IROV..  
Дата: 13.10.10 14:34
Оценка:
Здравствуйте, los puercos, Вы писали:

LP>>>3) использовать goto и быстро выпить йаду

B>>А вас switch не смущает?
LP>Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command


да я гдето видел написаный на ООП "Hello World"

не кажеться что всему свое место? и не стоит все под одно "чисать"

я не волшебник, я только учусь!
Re[4]: Как выйти сразу из нескольких циклов?
От: March_rabbit  
Дата: 13.10.10 14:48
Оценка:
Здравствуйте, los puercos, Вы писали:

LP>>>3) использовать goto и быстро выпить йаду

B>>А вас switch не смущает?
LP>Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command
а вот не надо делать сложно (и "красиво") там, где можно просто. Такие вот авторы напишут, а потом другому что-нибудь поправить или добавить в код приходится. И начинается: шаблоны, сигналы, мапперы, визиторы, макросы.... вплоть до того, что есть у класса метод, а где объявлен и определен — не найти, ибо за шаблонами и макросами спрятан (это из последнего, но я ранее с таким же сталкивался)....
Re[5]: Как выйти сразу из нескольких циклов?
От: Mr.Delphist  
Дата: 14.10.10 10:46
Оценка:
Здравствуйте, blackhearted, Вы писали:

B>Здравствуйте, los puercos, Вы писали:


LP>>>>3) использовать goto и быстро выпить йаду

B>>>А вас switch не смущает?
LP>>Смущает, очень. Краснею, смущаюсь и использую что-нибудь типа Visitor или Command

B>ПГМ ?

B>PS П == паттернизм.

Неужели Вы предпочитаете МГМ?
PS М == макароны
Re[5]: Как выйти сразу из нескольких циклов?
От: March_rabbit  
Дата: 14.10.10 14:51
Оценка:
Здравствуйте, Brutalix, Вы писали:

B>Здравствуйте, March_rabbit, Вы писали:


M_>>кстати, смех смехом, но разок я именно так и сделал. Не для выхода из циклов, а для реализации длинного и тупого алгоритма, в котором ошибка на каждом шаге приводила к завершению работы процедуры. Просто return не прокатывал, потому как надо было выполнить еще пару действий. Решил не плодить дерева if-ов, а сделать линейный алгоритм с выходом по исключениям.


B>А почему не сделать так:


B>
B>int длинный_и_тупой_алгоритм() {

B>    тупые_вычисления_1();
B>    if (шит_хаппен) goto приехали;

B>    тупые_вычисления_2();
B>    if (шит_хаппен) goto приехали;

B>    усё_в_упорядке();

B>приехали:
B>    return 0;
B>}
B>


B>?

ну, чисто на случай, если вариантов нужных действий окажется больше одного. Показалось, что делать метки и goto — это хуже, чем исключения.
Re: Как выйти сразу из нескольких циклов?
От: k.o. Россия  
Дата: 14.10.10 15:15
Оценка:
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?

Заворачивание нескольких циклов в итератор и один цикл с break по этому итератору. Извращенным этот способ делает, пожалуй, только сложность написания своих итераторов и отсутствие лямбд. В C# с LINQ это делается элементарно
Автор: dorofeevilya
Дата: 13.10.10
, в C++0x, наверно, тоже будет не так страшно.
Re[5]: Как выйти сразу из нескольких циклов?
От: stapter  
Дата: 15.10.10 08:03
Оценка:
Здравствуйте, Brutalix, Вы писали:

B>А почему не сделать так:


B>
B>int длинный_и_тупой_алгоритм() {

B>    тупые_вычисления_1();
B>    if (шит_хаппен) goto приехали;

B>    тупые_вычисления_2();
B>    if (шит_хаппен) goto приехали;

B>    тупые_вычисления_3();
B>    if (шит_хаппен) goto приехали;

B>    тупые_вычисления_4();
B>    if (шит_хаппен) goto приехали;

B>    тупые_вычисления_5();
B>    if (шит_хаппен) goto приехали;

B>    усё_в_упорядке();

B>приехали:
B>    return 0;
B>}
B>


А почему бы "приехали" не сделать функцией? и использовать ее в связке с return?
Хотя, в данном примере даже функция не нужна. вместо goto приехали можно сразу return 0; или добавить переменную int result_code, оставив один return в конце и не забывая проверять ее перед каждым вычислением, — специально для тех кто придерживается идеологии одного return'a. //я не один из них

Вспомнил реальный случай. Студент хотел устроиться на работу, и ему дали несколько простых заданий, среди которых нужно было отсортировать массив. В его сортировке не было ни одного цикла реализованного с помощью for, while, do while (об stl даже не заикаюсь). Он сделал все на goto:
Спасибо ему за хорошее настроение целого отдела!

По теме делаю как говорил Erop "Ещё можно вложенные циклы в отдельный метод завернуть и выходить из него по return".
Сам, если вижу в коде goto начинаю испытывать чувство повышенной предосторожности. ИМХО и не только, "первым и единственным аргументом в пользу GOTO есть то, что другие операторы могут в 99% случаев заменить его с пользой для читабельности и структурированности", поэтому использовать его может и нужно, но только когда без этого уже никак не обойтись. Таких случаев на моей плюсовой практике еще не было. Интересно было бы посмотреть на реальные ситуации, когда без goto, ну уж совсем никак!
Re[6]: Как выйти сразу из нескольких циклов?
От: Brutalix  
Дата: 15.10.10 12:08
Оценка:
Здравствуйте, stapter, Вы писали:

S>А почему бы "приехали" не сделать функцией? и использовать ее в связке с return?


Там может быть какая нибудь хрень, которая, например, делает что либо с чем-нибудь локальным, которое пришлось бы передавать в эту функцию в качестве параметров. Или еще что нить.

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


S>Хотя, в данном примере даже функция не нужна. вместо goto приехали можно сразу return 0; или добавить переменную int result_code, оставив один return в конце и не забывая проверять ее перед каждым вычислением, — специально для тех кто придерживается идеологии одного return'a. //я не один из них


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

S>Сам, если вижу в коде goto начинаю испытывать чувство повышенной предосторожности. ИМХО и не только, "первым и единственным аргументом в пользу GOTO есть то, что другие операторы могут в 99% случаев заменить его с пользой для читабельности и структурированности", поэтому использовать его может и нужно, но только когда без этого уже никак не обойтись. Таких случаев на моей плюсовой практике еще не было. Интересно было бы посмотреть на реальные ситуации, когда без goto, ну уж совсем никак!


По теме. я б осетра уменьшил и свечи потушил сказал — в 80% без идина можно пережить. еще в 10% можно изящно извратиться и обойтись без него. Но в 10% случаев с ним проще
Re[7]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 16.10.10 10:05
Оценка:
Здравствуйте, Brutalix, Вы писали:

B>Там может быть какая нибудь хрень, которая, например, делает что либо с чем-нибудь локальным, которое пришлось бы передавать в эту функцию в качестве параметров. Или еще что нить.

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

Можно сделать из функции класс, а локальные переменные сделать его полями...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 16.10.10 10:09
Оценка:
Здравствуйте, March_rabbit, Вы писали:

B>>О, мьсе понимает толк в извращениях!

M_>кстати, смех смехом, но разок я именно так и сделал. Не для выхода из циклов, а для реализации длинного и тупого алгоритма, в котором ошибка на каждом шаге приводила к завершению работы процедуры. Просто return не прокатывал, потому как надо было выполнить еще пару действий. Решил не плодить дерева if-ов, а сделать линейный алгоритм с выходом по исключениям.

длинный_и_тупой_алгоритм()
{
    ПараВействийПередВыходомДелатель doNotForgetDoIt;
    тупое_действие_возможно_содержащее_return_1();
    тупое_действие_возможно_содержащее_return_2();
    тупое_действие_возможно_содержащее_return_3();
    тупое_действие_возможно_содержащее_return_4();
    тупое_действие_возможно_содержащее_return_5();
    doNotForgetDoIt.Спасибо_ничего_не_надо();
}
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Как выйти сразу из нескольких циклов?
От: trophim Россия  
Дата: 16.10.10 21:27
Оценка:
Здравствуйте, Erop, Вы писали:

E>По goto за конец цикла и не страдать.


А на сколько при этом будет испорчена карма?
... << RSDN@Home 1.2.0 alpha 4 rev. 1446>>
Let it be! — Давайте есть пчелу!
Re[3]: Как выйти сразу из нескольких циклов?
От: Sni4ok  
Дата: 16.10.10 23:04
Оценка:
Здравствуйте, trophim, Вы писали:

T>А на сколько при этом будет испорчена карма?


карма испортится, если человек будет просаживать производительность на пустом месте.
Re[3]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 18.10.10 06:08
Оценка:
Здравствуйте, trophim, Вы писали:

E>>По goto за конец цикла и не страдать.

T>А на сколько при этом будет испорчена карма?

Это зависит от намерений и умений посылающего
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Как выйти сразу из нескольких циклов?
От: March_rabbit  
Дата: 18.10.10 10:29
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Brutalix, Вы писали:


B>>Там может быть какая нибудь хрень, которая, например, делает что либо с чем-нибудь локальным, которое пришлось бы передавать в эту функцию в качестве параметров. Или еще что нить.

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

E>Можно сделать из функции класс, а локальные переменные сделать его полями...

1. Лишние телодвижения (объявление класса, мемберов, конструктора, оператора скобки)
2. Вынос логики наружу из места использования (именно поэтому я предпочитаю использовать макросни типа Q_FOREACH вместо STL, где это возможно).

И все это только для того, чтобы избавиться от goto или лишнего бросания исключения? Стоит ли оно того?
Re[9]: класс-механизм
От: Erop Россия  
Дата: 18.10.10 10:42
Оценка:
Здравствуйте, March_rabbit, Вы писали:

M_>И все это только для того, чтобы избавиться от goto или лишнего бросания исключения? Стоит ли оно того?

Только ради goto не стоит, конечно. Я вроде бы прямо так и советовал по goto выходить и не страдать.
Но у подхода класс-механизм
Автор: Erop
Дата: 26.08.05
есть и другие плюсы!!!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Как выйти сразу из нескольких циклов?
От: Vain Россия google.ru
Дата: 20.10.10 13:22
Оценка:
Здравствуйте, okman, Вы писали:

B>>О, мьсе понимает толк в извращениях!

O>Извращение — писать большущие конструкции с вложенными циклами,
O>а потом думать как из них вылезти.
Месье знает как писать без вложенных циклов?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: Как выйти сразу из нескольких циклов?
От: Vain Россия google.ru
Дата: 20.10.10 14:23
Оценка:
Здравствуйте, XJess, Вы писали:

XJ>Привет всем!

XJ>Собственно, сабж. Читала книгу по C# и там описание оператора goto. И вдруг всплыл этот наболевший вопрос в голове. Как Вы бы вышли сразу из нескольких циклов? Мне приходят в голову два варианта — с помощью опять же goto или флагами. И то, и другое некрасиво вроде... Может, еще есть какие извращенные способы, которые кто-то придумал?
Вброшу и свои заготовки: http://codepad.org/zzGcnfwg
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[2]: Как выйти сразу из нескольких циклов?
От: uzhas Ниоткуда  
Дата: 20.10.10 14:35
Оценка:
Здравствуйте, Vain, Вы писали:

V>Вброшу и свои заготовки:

http://codepad.org/wPDtwwBP
Re[3]: Как выйти сразу из нескольких циклов?
От: Vain Россия google.ru
Дата: 20.10.10 14:37
Оценка:
Здравствуйте, uzhas, Вы писали:

V>>Вброшу и свои заготовки:

U>http://codepad.org/wPDtwwBP
Это к чему?
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[4]: Как выйти сразу из нескольких циклов?
От: uzhas Ниоткуда  
Дата: 20.10.10 14:44
Оценка:
Здравствуйте, Vain, Вы писали:

V>Это к чему?

это к тому, что подобные фишки могут быть в самом языке, а не на костылях
Re[5]: Как выйти сразу из нескольких циклов?
От: Vain Россия google.ru
Дата: 20.10.10 14:45
Оценка:
Здравствуйте, uzhas, Вы писали:

V>>Это к чему?

U>это к тому, что подобные фишки могут быть в самом языке, а не на костылях
Могут, но нету, пока что. А кушать хочется каждый день
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re[5]: Как выйти сразу из нескольких циклов?
От: night beast СССР  
Дата: 21.10.10 04:30
Оценка:
Здравствуйте, uzhas, Вы писали:

V>>Это к чему?

U>это к тому, что подобные фишки могут быть в самом языке, а не на костылях

а какие use-case этой фишки?
ни разу не приходилось использовать.
Re[6]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 21.10.10 10:16
Оценка:
Здравствуйте, okman, Вы писали:

O>Что-то не припомню, когда в последний раз мне понадобилась конструкция с вложенными циклами.

O>Один в другом — бывает иногда, но все равно редко. И выход из них обычно с помощью return.

От задач очень зависит...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 21.10.10 11:19
Оценка:
Здравствуйте, okman, Вы писали:

O>На первый раз можно goto или даже throw обойтись (с пониманием того что делаешь и к чему это приведет).

O>Ну а дальше — или пересаживаться на ассемблер, где jmp не так порицается, как его затравленные
O>высокоуровневые аналоги, или временно завязать с кодингом и вернуться к чтению классики и перфокартам.

IMHO, это глупо -- пересаживаться с С на асм только из-за предубеждений против goto в С...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[9]: Как выйти сразу из нескольких циклов?
От: okman Беларусь https://searchinform.ru/
Дата: 21.10.10 11:51
Оценка:
Здравствуйте, Erop, Вы писали:

E>IMHO, это глупо -- пересаживаться с С на асм только из-за предубеждений против goto в С...


Интересно, а глупо ли обратное ?
Я, например, пересел с ассемблера сначала на C, а потом на C++ в основном по одной причине —
в низкоуровневых языках очень мало автоматических средств, гарантирующих корректность кода.
Например, нет деструкторов (не представляю, как можно жить без RAII), нет проверок типов (очень
часто оставлял DWORD вместо PDWORD и "прокатывало"), нет средств структурирования кода и
отделения логики от интерфейса. А потребность в таких средствах была сильнейшая, доходило до
того, что я чуть не сел за написание "ассемблера с классами", благо про C/C++ узнал.

Ну а если человек испытывает с C/С++ постоянные неудобства — то он return-ом не может вернуться в
"позапрошлую" функцию, то из восьми вложенных циклов не может нормально вылезти, — ему самое
место в индустрии низкоуровневых языков. Разве нет ?
Re[10]: Как выйти сразу из нескольких циклов?
От: Erop Россия  
Дата: 21.10.10 12:18
Оценка:
Здравствуйте, okman, Вы писали:

O>"позапрошлую" функцию, то из восьми вложенных циклов не может нормально вылезти, — ему самое

O>место в индустрии низкоуровневых языков. Разве нет ?

Нет. Так как ему место не в индустрии, а там, где учат писать ПОНЯТНЫЙ код...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Как выйти сразу из нескольких циклов?
От: B0FEE664  
Дата: 09.11.10 10:36
Оценка:
Здравствуйте, XJess, Вы писали:

XJ> Может, еще есть какие извращенные способы, которые кто-то придумал?


#include <setjmp.h> и стандартные setjmp(..)/longjmp(..)

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