Re[25]: Выйти из двух циклов сразу
От: Sergey Россия  
Дата: 13.06.02 06:59
Оценка:
Здравствуйте VladD2, Вы писали:

S>>А прекомпилируемые заголовочные файлы тоже неслабо глючат. Сколько раз из-за них pure virtual function call получал, и не сосчитать.


VD>Не замечал. Мы в дебаге всегда их используем. Даже с ними компилиция проекта (полная) занимает по 20 минут. Так что без них нугуда. :(


Я новую ветку начал — тема слишком далеко ушла от goto и циклов :)
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[5]: Выйти из двух циклов сразу
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.06.02 01:38
Оценка: 60 (5) +1 -1 :)
Здравствуйте WolfHound, Вы писали:

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


DG>>Интересно, почему мне намного больше нравится следующий код?

WH>А мне нет особенно после того как я вспоминаю про скрытый код о котором (кроме интерфейса) я ни чего не знаю.
DG>>И почему очень не нравится предыдущий код, особенно, если бы его писал мой подчиненный...
WH>И почему-бы я не стал работать на босса которого интересует как выглядит мой код, а не то как он работает.
Громко смеюсь. Я вот тут как бы работаю этаким чем-то вроде босса среднего звена. Если не смотреть в код и не иметь правил оформления, то даже корректные программы в проекте с числом участником более двух начинают... как бы это сказать... Коэффициент дублирования кода возрастает в разы, равно как и процент изменений на каждый апдейт... Множатся длинные куски закомментированного кода... Который остался от предыдущего автора, но поскольку он пишет в своем стиле, то его проще убить чем понять...

Для справки приведу список ситуаций, за которые я могу блин нахер уволить, несмотря на корректность' программы:
1. Многократное использование явных констант в коде.
2. Независимое использование зависимых констант в коде
3. Написание фрагментов кода с избыточностью более чем в 3 раза
4. Написание собственных классов, дублирующих одобренные к применению библиотеки
5. Применение оператора goto без аргументированного объяснения причин, по которым он абсолютно необходим.
6. ...
'примечание: под корректностью программы понимается ее способность получить правильные результаты на оговоренных тестовых задачах
И буду прав, потому что код человек пишет для того, чтобы им пользовались другие, а не для того чтобы компилер смог его скомпилять. И если человек написал код, за который ему платят деньги, то он должен и отдать код, а не екзешник.
Так что код подчиненных я смотрел, смотрю, и буду смотреть, чтобы меньше увольнять пришлось — так у меня хоть возможность есть вовремя вежливо указать человеку на его ошибки.

DG>>ИМХО, с таким стилем кода сложно писать большие приложения.

WH>Просто особенно после того как автокомментирование врубается. :))
У меня складывается личное очучение что большинство народа в этой тусовке никогда не работало в команде :)
Ребята, я может какой-нибудь там этот... оппортунист... или конформист... как там меня однажды обозвали... Короче, я вот как-то верю в большинство общепринятых концепций, в основном потому, что практика показывает их истинность. Так вот, в хорошей программе комментариев должно быть МАЛО. Если приходится каждый пук автокомментировать, то это означает, что по коду не удается однозначно восстановить алгоритм. Далее, поскольку комменты жрут место, то программа распухает, и характерная "длина когерентности" тоже вместе с ней, затрудняя понимание еще сильнее. Теперь придется еще комментов подбавить, чтобы например понять, чей это елзе или закрывающая скобка... Вот вам и пестня...
Так что будьте проще. Пишите для людей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[13]: Выйти из двух циклов сразу
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.06.02 02:09
Оценка:
Здравствуйте Patalog, Вы писали:

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


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


VD>>Нормальный такой. Если нет, то на диске припрут или на дискетах. Не смотреть же на бездыханную железку за которые деньги плочены.


P>Мсье был в городе Мухосранске? А ежели стоимость доставки дискетки сравнима по стоимости с железкой?

Это где такое??? Я имею в виду программируемые железки дешевле 24уе? См. тарифы на курьерскую доставку в Мухосранск.
P>>>Ежели в моем "замечательном монолите" будет критическая ошибка меня и так уволят ;)

VD>>А толку, то? Исправить то твой монлит уже никто не сможет.


P>Ты пробовал, ты знаешь. Все прекрасно правится. Может и не так быстро но правиться. А в данной ситуации (я повторюсь я возвел ее в ранг гиперболы, так же как и вы пресловутый "монолит") закладываться на возможные ошибки просто нерентабельно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Выйти из двух циклов сразу
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.06.02 02:26
Оценка:
W>Итак я придумал хороший вопрос, если он понравится можно открать тему.
W>Мне приходится пользоваться MSN (аська у нас отключена).
W>Но внем несохраняется история разговора в окне(если его закрыть).
W>Вопрос как это зделать (можно перейти на совмесное решение проблемы).
W>Я посмотрел библиотека типов там есть. Но описания интерфейсов я пока
W>ненашел.А тема будет звучать так доработаем MSN если Билл этого делать
W>нехочет.
Поставь Trillian
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Выйти из двух циклов сразу
От: Patalog Россия  
Дата: 14.06.02 07:03
Оценка:
Здравствуйте Sinclair, Вы писали:


VD>>>Нормальный такой. Если нет, то на диске припрут или на дискетах. Не смотреть же на бездыханную железку за которые деньги плочены.


P>>Мсье был в городе Мухосранске? А ежели стоимость доставки дискетки сравнима по стоимости с железкой?

S>Это где такое??? Я имею в виду программируемые железки дешевле 24уе? См. тарифы на курьерскую доставку в Мухосранск.

А это легенда. Почитай тред сначала и не обостряйся, тема давно закрыта.
Почетный кавалер ордена Совка.
Re[7]: Выйти из двух циклов сразу
От: Аноним  
Дата: 18.06.02 20:52
Оценка:
MT>>>Можно так:
MT>>>
MT>>>while(1)
MT>>>{
MT>>>  for(int i = 0; i < 100; i++)
MT>>>  {
MT>>>    if(i == 77)
MT>>>      break;
MT>>>  }
MT>>>  if (i < 100) break;
MT>>>}
MT>>>


А>>Это прокатит только на VC6 ;)


P>Это почему же, интересно?! По-моему на любом C. Что здесь скользкого? Мне этот вариант нравится :up: .

Нравится? Ну и зря. Если параметр цикла (100) поменяется, вы должны будете поменять его в двух местах. Во втором месте вы поменать забудете — вот вам и новый баг. Зачем же их плодить?


А>>Я обычно делаю так:


А>>
А>>bool bContinue = true;
А>>while(bContinue) {
А>>  for(int i = 0; i < 100; i++) {
А>>    if (i == 77) {
А>>      bContinue = false;
А>>      break;
А>>    }
А>>  }
А>>}
А>>


P>Ну а это, сэр, имхо, банально :down: .

'Банально' в ваших устах звучит как ругательство?
Этот вариант лучше, ибо будет работать даже под водой.
Re[3]: Выйти из двух циклов сразу
От: Аноним  
Дата: 18.06.02 20:55
Оценка:
P>Никак не могу понять почему народ так боится goto? Для этого есть какие-то причины помимо эстетических? Ежели есть просветите плиз. А то я иногда пользуюсь, особенно в подобных случаях, и мне кажется это более красиво, чем с переменной...

P>ЗЫж Не флейма окаянного ради, может я и правда чего не знаю/понимаю?

Книжек почитайте, там все написано. Или в Минском БГУИР поучитесь, там объяснят
Re[4]: Выйти из двух циклов сразу
От: m.a.g. Мальта http://dottedmag.net/
Дата: 19.06.02 04:03
Оценка: 21 (2)
Здравствуйте Аноним, Вы писали:

P>>Никак не могу понять почему народ так боится goto? Для этого есть какие-то причины помимо эстетических? Ежели есть просветите плиз. А то я иногда пользуюсь, особенно в подобных случаях, и мне кажется это более красиво, чем с переменной...


P>>ЗЫж Не флейма окаянного ради, может я и правда чего не знаю/понимаю?

А>Книжек почитайте, там все написано. Или в Минском БГУИР поучитесь, там объяснят

А еще лучше поучиться в Новосибирском НГУ. Тут объяснят, что всякое средство хорошо в своем контексте, и что есть парадигмы программирования, которые ничуть не хуже других, и при этом явно поощряют использование goto.

Эмоциональные возражения типа "а я такие программы читать не умею" не принимаются по следующим причинам:

1. Стили, поощряющие активное использование goto сейчас практически забыты (имхо незаслуженно) и найти программу, правильно использующую goto практически невозможно.
2. Такие возражения по сути своей являются завуалированной формой высказывания "Меня научили не ставить goto. Почему это так, я не знаю, но раз учили, значит это правильно". Причем из этого можно сделать вывод, что либо учителя плохо знают предмет и считают, что goto — это действительно плохо, что говорит либо об их некомпетентности, либо о поражении паразитом М0 и, как следствие, психологией паковщиков, либо учителя являются хорошими специалистами, но плохими педагогами, и забыли сказать, что goto плохо только в структурном программировании, что говорит о том, что ученики имеют психологию паковщиков, а не картостроителей и предпочли положить новый пакет знаний к себе в память, а не включить его в свою карту, забыв о том, что знания, выдаваемые учителями-картостроителями, являются не пакетом, а веером путей по карте.

ps: для дальнейших пояснений см Programmers' Stone.
Re[4]: Выйти из двух циклов сразу
От: Patalog Россия  
Дата: 19.06.02 06:21
Оценка:
Здравствуйте Аноним, Вы писали:

P>>Никак не могу понять почему народ так боится goto? Для этого есть какие-то причины помимо эстетических? Ежели есть просветите плиз. А то я иногда пользуюсь, особенно в подобных случаях, и мне кажется это более красиво, чем с переменной...


P>>ЗЫж Не флейма окаянного ради, может я и правда чего не знаю/понимаю?

А>Книжек почитайте, там все написано. Или в Минском БГУИР поучитесь, там объяснят

ПациЭнт, не обостряйтесь, весна уже давно кончилась.
Лучше объясните популярно чему это вас научили в славном "Минском БГУИР". Али книжки процитируйте...
Почетный кавалер ордена Совка.
Re[6]: Выйти из двух циклов сразу
От: Аноним  
Дата: 25.07.02 14:08
Оценка: -2
Здравствуйте Андрей, Вы писали:

слегка подправить можно
  bool bContinue = true;
  for(int i = 0; (i < 100) && bContinue; i++)
  {
    if (i == 77)
    {
      bContinue = false;
      break;
    }
  }
Re[12]: Выйти из двух циклов сразу
От: Whirlwind Россия http://whirlwind.ru
Дата: 12.08.02 10:38
Оценка:
Здравствуйте Sergey, Вы писали:

S>И правильно сделали. А комитет по стандартизации C++ правильно делает, что goto не убирает. Хотя break усовершенствовать не помешало бы — глядишь, goto только в legacy коде и остался бы.


AS>>Проблема в том, чтоь вложенные циклы со сложной логикой выхода — конструкция сама по себе не очень очевидная. Я согласен, что если программу можно перепроектировать и избавиться от них, то это нужно сделать. Но это возможно не всегда.


ИМХО, Sergey предлагает усовершенствовать break для того, что бы добиться неявности, описанной в следующем абзаце. Может быть и return таким образом... Нет, лучше заменить все это одним оператором...

ЗЫ; Неужели я дочитал до этого места.
Re: Выйти из двух циклов сразу
От: Poudy Россия  
Дата: 16.08.02 22:22
Оценка:
Простите-извините, чисто из любопытства, а как бы вы отнеслись к такому вот:

while(1): needBreak;
{
  for(int i = 0; i < 100; i++)
  {
   if(i == 77) break needBreak;
  }
}


Это, конечно, не С++, но break 2 — порождает ошибки при появлении новых {}, а это, вроде, выглядит прилично. ?
Re: Выйти из двух циклов сразу
От: Pushkin Россия www.linkbit.com
Дата: 16.10.02 06:39
Оценка:
Безумно высокое количество откликов на этот в общем-то невинный вопрос говорит о том,
что он попал в больное место — НУ НЕТ здесь нормального способа выйти.
Почему бы нам всем не признать, что разработчики языка лоханулись, и просто ЗАБЫЛИ
дать нам эту возможность.
Ведь это было так просто — какое-нибудь ключевое слово типа breakbreak или break2.
Предлагаю написать возмущённое письмо

ЗЫ: Меня давно мучит вопрос, а нельзя ли это как-то своими силами сделать —
задефайнить как-нибудь, пусть даже и монстра какого-нибудь ассемблерного,
но чтоб потом одно слово BREAKBREAK писать
Re[2]: Выйти из двух циклов сразу
От: neutrino  
Дата: 16.10.02 07:29
Оценка: +1
Здравствуйте OlegO, Вы писали:

OO>Например сгенерить исключение:


OO>
OO>try
OO>{
OO>   while(1)
OO>   {
OO>     for(int i = 0; i < 100; i++)
OO>     {
OO>       if(i == 77)
OO>          throw 77;
OO>     }
OO>   }
OO>}
OO>catch(int e)
OO>{
OO>   // e==77
OO>}
OO>


это крайне неэффективно, на обработку исключения тратится очень много ресурсов (порядка в 1000 раз медленнее), его нужно выбрасывать только в крайних случаях.
наверняка такой цикл выполняется много раз.
Re[3]: Выйти из двух циклов сразу
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 16.10.02 08:24
Оценка:
Здравствуйте neutrino, Вы писали:

N>это крайне неэффективно, на обработку исключения тратится очень много ресурсов (порядка в 1000 раз медленнее), его нужно выбрасывать только в крайних случаях.

N>наверняка такой цикл выполняется много раз.

Ну на счет тысячи положим ты загнул, на самом деле где то 10.
Но выбрасывать исключение для такого это архитектурно не правильно,
помоему об этом даже Страуструп писал.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: Выйти из двух циклов сразу
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 16.10.02 08:26
Оценка:
Здравствуйте Pushkin, Вы писали:


P>Безумно высокое количество откликов на этот в общем-то невинный вопрос говорит о том,

P>что он попал в больное место — НУ НЕТ здесь нормального способа выйти.
P>Почему бы нам всем не признать, что разработчики языка лоханулись, и просто ЗАБЫЛИ
P>дать нам эту возможность.
P>Ведь это было так просто — какое-нибудь ключевое слово типа breakbreak или break2.
P>Предлагаю написать возмущённое письмо

P>ЗЫ: Меня давно мучит вопрос, а нельзя ли это как-то своими силами сделать —

P>задефайнить как-нибудь, пусть даже и монстра какого-нибудь ассемблерного,
P>но чтоб потом одно слово BREAKBREAK писать

А чем на самом деле goto не устраивает? Твой ассемблерный монстр в прямой форме .
То что goto это маленько плохо не значит что если ты сделаешь то же самое но без букв 'g' и 't' в названии это сразу станет правильным.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[13]: Выйти из двух циклов сразу
От: Hacker_Delphi Россия  
Дата: 17.10.02 02:06
Оценка:
Здравствуйте VladD2, Вы писали:

VD>Я теперь все кому не зслужено, или в отместку ноль залепили буду самую высокую оценку довать. Даже если ответ и не выдающийся, а просто верный. Так что перед тем как сделать пакость, человеку луше подумать.


Я думаю, что лучше ввести фичу с комментариями к нулям, которую в форуме RSDN обсуждали — конструктивнее...
а оценки без правильных комментариев перевешивать на того, кто их ставил
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: Выйти из двух циклов сразу
От: Pushkin Россия www.linkbit.com
Дата: 17.10.02 06:32
Оценка:
Здравствуйте Anatolix, Вы писали:

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



A>А чем на самом деле goto не устраивает? Твой ассемблерный монстр в прямой форме .

A>То что goto это маленько плохо не значит что если ты сделаешь то же самое но без букв 'g' и 't' в названии это сразу станет правильным.

1) слово breakbreak лучше показывает, что происходит на самом деле
2) не надо дебильное имя для метки придумывать
3) не надо уродовать левый, красиво отформатированный край текста кривым зубом метки
4) цикл заканчивается строкой с закрывающей скобкой — если перенести куда надо или удалить, можно не спотыкаться

да на самом деле и ДА, не устраивают меня буковки 'g' и 't' !!!
не хочу я использовать штык-нож для открывания банок с горошком !!!
Re[4]: Выйти из двух циклов сразу
От: Anton V. Kolotaev  
Дата: 17.10.02 06:39
Оценка:
Здравствуйте Pushkin, Вы писали:

P>1) слово breakbreak лучше показывает, что происходит на самом деле


Хорошо, а как ты будешь из 3, 4 циклов выходить? А из n?
Re[5]: Выйти из двух циклов сразу
От: Patalog Россия  
Дата: 17.10.02 13:14
Оценка:
Здравствуйте Anton V. Kolotaev, Вы писали:

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


P>>1) слово breakbreak лучше показывает, что происходит на самом деле


AVK>Хорошо, а как ты будешь из 3, 4 циклов выходить? А из n?


breakbreakbreak\breakbreakbreakbreak Непозиционная система исчисления... Как римские цифры.
Почетный кавалер ордена Совка.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.