На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (32) « Первая ... 8 9 [10] 11 12 ...  31 32  ( Перейти к последнему сообщению )  
> goto vs break & continue , Кроха-сын пришел к отцу и спросила кроха: "goto - это хорошо?"
    Цитата Славян @
    Мешает то, что эти два цикла и так по сути оформлены в функцию. Плюс вагон переменных, кои засылать в функцию равносильно заново написать примерно такую же. :unsure:

    Значит стоит пересмотреть архитектуру проекта, и переписать правильно.

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

    Добавлено
    Можно даже вынести вот этот участок кода в отдельную функцию:
    ExpandedWrap disabled
       
               if( ... ) terVer[2][5] *= ...;
               // испытываем воздействие
               if( count1[15] + (int)pow(terVer[3][4] + terVer[2][5], pokaz) > count1[2] ) // опасное положение!
                 if( superVertical[2]<3 ) // мат нам грядёт
                   goto LBL_matPrideHanaBude;//тут будет return какоето значение.

    Передавая в нее row и col, а уже внутри нее делать конкретные сравнения что там с чемто. Если у тебя очень много переменных в алгоритме используется, возможно стоит сгруппировать их в структуру или класс.
    Сообщение отредактировано: KILLER -
      Цитата KILLER @
      значит функцию можно разгрузить - вынеся эти циклы в отдельную функцию.
      Ну так и получится костыль вида:
      ExpandedWrap disabled
        int
        SomeStrangeFunction(...)
        {
           ...
           return p;
        }
        ...
      Но замечание OpenGL'я мне показалось более полезным в возражении вам.

      Добавлено
      Цитата KILLER @
      Если у тебя очень много переменных в алгоритме используется, возможно стоит сгруппировать их в структуру или класс.
      Ну так это ж тоже костыль: для одной функции городить особый класс.
      Цитата KILLER @
      Передавая в нее row и col, а уже внутри нее делать конкретные сравнения что там с чемто.
      Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. :yes-sad:
        Цитата Славян @
        Ну так это ж тоже костыль: для одной функции городить особый класс.

        :scratch: Почему костыль? Кто тебе такое сказал?

        Цитата Славян @
        Ну так и получится костыль вида:

        Почему это костыль?

        Цитата Славян @
        Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. :yes-sad:

        Так я же выше писал - проще все писать в функции main, по сути ты занимаешься написанием такой же функции, из которой выносишь, когда разбиваешь код на классы и функции. В итоге по твоей логике - классы/структуры/функции(кроме main) - по сути один большой костыль.
        Так ведь?

        Добавлено
        Цитата Славян @
        Но замечание OpenGL'я мне показалось более полезным в возражении вам.

        Это было не замечание. А всего лишь фантазия, призванная оправдать использование goto.

        Добавлено
        Ну это как знаешь пиндосы любят придумывать - "вот смотрите, у меня в руках пробирка с какой то херней, поэтому срочно нужно вводить войска в Ирак". Вот так и тут. Сам придумал проблему, сам привел ее в качестве аргумента. Неужто выход из двойного цикла такая редкая задача? Не думаю, очень часто встречается, и я , другие обходятся както без goto.
        Сообщение отредактировано: KILLER -
          Цитата KILLER @
          Почему костыль? Кто тебе такое сказал?
          Потому что получается, что данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль.
          Цитата KILLER @
          Цитата Славян @
          Ну так и получится костыль вида: intSomeStrangeFunction(...)
          Почему это костыль?
          Как и выше: лишняя функция, лишнее название.
          Цитата KILLER @
          А всего лишь фантазия, призванная оправдать использование goto.
          Ну я вот только что глянул исходники винды - и там вагоны goto. И ведь не сказать же, что примитивные программисты написали. Так что это не оправдание, а просто обращение внимания на самые разные случаи.
            Цитата Славян @
            Потому что получается, что данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль.

            Действительно. Выходит 99% пишут тупой говнокод используя классы и структуры, в том числе разработчики компиляторов. В общем все 3.14дарасы а ты один дартаньян. Я понял твою логику.

            Цитата Славян @
            Как и выше: лишняя функция, лишнее название.

            Что значит лишняя функция? О чем ты?

            Цитата Славян @
            Ну я вот только что глянул исходники винды - и там вагоны goto.

            О еще один. Смотри вон у вовы - 100 000 строк кода в функции main, значит в этом ничего плохого нет?

            Цитата Славян @
            И ведь не сказать же, что примитивные программисты написали.

            Это еще почему? Примитивные и пишут такой код. Возьми тот же MFC - быдло подела, быдлокодеров.

            Цитата Славян @
            Так что это не оправдание, а просто обращение внимания на самые разные случаи.

            Это оправдание своей лени, либо своего бессилия. Когда ты не можешь придумать ничего лучше, чем впихнуть goto, это прямо говорит о твоем бессилии выдать удобочитаемый качественный код.
              Холивары какие-то идиотские идут... Вроде как активность какая-то, а никакого желания присоединиться не возникает.
                Цитата KILLER @
                Действительно. Выходит 99% пишут тупой говнокод используя классы и структуры, в том числе разработчики компиляторов. В общем все <цензура> а ты один дартаньян. Я понял твою логику.
                Классы (да и функции) нужно делать так, чтобы их появление было естественным, а лучше - частым, дабы оправдывать их название и вынос за main. А вы пытаетесь всё в одну кучу городить. Зачем? Верно D_KEY заметил:
                Цитата D_KEY @
                Холивары какие-то идиотские идут...
                  Цитата Славян @
                  Классы (да и функции) нужно делать так, чтобы их появление было естественным, а лучше - частым, дабы оправдывать их название и вынос за main.

                  Зачем что то выносить из main, если:
                  Цитата Славян @
                  лишняя функция, лишнее название.

                  Цитата Славян @
                  данные надо зачем-то группировать, а группу обзывать, а это лишние обозначения, замусоривающие код. То бишь - костыль.

                  Цитата Славян @
                  для одной функции городить особый класс.

                  Цитата Славян @
                  Ну так мы, фактически, и будем заниматься написанием такой же функции, из которой выносим. Короче, костыль на костыле. :yes-sad:

                  ???

                  Цитата Славян @
                  Верно D_KEY заметил:

                  Он тебя и имел ввиду. Ты еще не понял? Не я же тут чушь несу :-?

                  Добавлено
                  Славян, твои "аргументы" лишены всякого смысла.

                  Добавлено
                  Вот ежели бы ты код показал - вот смотри, вот goto тут рулит, а без него - будет полный оцтой и вообще без него тебе дороже будет, чем с ним. Тогда да. Но такого аргумента не будет по определению, темболее от тебя. Потому что goto - сам по себе является костылем.
                    Цитата Славян @
                    Цитата Qraizer @
                    Ладно выйти, а если войти?
                    Мне ни разу такого не попадалось. Но так, сходу, и проблем со входом при наличии goto не вижу. А без него - точно такой же гемор с излишними плясками с переменными да условиями. :yes-sad:
                    Вот-вот. Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку, а вот попробуй войди без goto. Тоже можно, доказано, но я бы руки в узел автору завязал за такой структурный фанатизм.
                      Цитата Qraizer @
                      Вот-вот. Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку, а вот попробуй войди без goto. Тоже можно, доказано, но я бы руки в узел автору завязал за такой структурный фанатизм.

                      Так зачем входить во вложенный цикл минуя предыдущие?

                      Добавлено
                      Цитата Qraizer @
                      Прикол в том, что выйти-то можно и без goto, нагородив вагон дополнительных условий и булевых переменных, чем на каждой итерации нагревая бедный ARM на планшете и съедая ему батарейку

                      Мда, как же сложно то все... <_<
                        Цитата KILLER @
                        Зачем что то выносить из main, ...
                        Мы выносим f(x), если её описание длинно, а пользоваться ею придётся не раз, скажем. Аналогично с классами (POINT и т.п.). А вот выносить из функции функцию лишь бы не было goto - однократное занятие, потому и искусственное, а значит - неправильное. ;)
                          Цитата KILLER @
                          Это не религия, 2 вложеных цикла - еще терпимо и нормально, а три и более - запутывают читающего код, а если там еще и goto, то и вовсе сбивает с толку. Если тебе так нужно запилить три цикла вложеных с возможностью выхода из третьего, оформи их в отдельную функцию/метод и ливай по return из них. Какие проблемы? Я видел функции по 5 тысяч строк кода - это читать не возможно в принципе, там и по три вложеных цикла было и по четыре. Как по мне, лучше сделать несколько мелких функций, чтобы было понятно и прозрачно, чем шаманить трехэтажные циклы.


                          Это свойство ограниченности человеческого разума. Внимательно можно прочесть только половину страницы А4, если текст длиннее, такую служебную записку "не осознают".

                          И это опять точка зрения рефакторинга, когда код имеет свою собственную ценность сам по себе. Это не всегда верно.

                          Но в целом я согласен. Если блок кода {} виден на экране (стандартный текстовый режим в 25 строк), то рефакторится блестяще, два экрана - хорошо, три - нормально, четыре - терпимо, пять... Уже временные затраты на осознание того где именно и что нужно изменить перевешивают время на структурирование и переразбивку на функции. Но это опять же точка зрения рефакторинга.

                          Цитата KILLER @

                          Вообще писать можно как угодно и что угодно. Ну вот возьмет чел, напишет свою прогу в 100 000 строк тупо в функции Main, и она будет работать. Что он неверно сделал? Да все он верно сделал. Какое вам дело до того как он пишет? Религия чтоль не позволяет 100 000 строк в функции main запилить? Вот так вот и выглядят ваши аргументы со стороны.
                          А на деле, эта религия мне помогает избежать кучи ошибок, и когда я открываю свой код через год - то я сходу понимаю что там написано. В отличии, если бы там были трехэтажные циклы и метки - такой код открываешь через месяц и начинаешь репу чесать и заного изучать что же я там имел ввиду - делая такие нетривиальные телодвижения.

                          Плюс ко всему, есть мнение, что чем больше у тебя будет осознанных слов в проге - тем легче она будет восприниматься и читаться. В случае с трехэтажными циклами - их меньше, и можно легко запутаться, никто не будет называть счетчик больше 5-6 букв, особенно если он часто используется в теле цикла. С функциями эта проблема решаема, т.к. мало кто называет функции в 1-2 буквы. И программа становится более читабельной.


                          Это опять же точка зрения рефакторинга, то есть, повторного использования кода. Я писал проги в 200000 строк за 10 минут с использованием CASE технологий (двухкилобайтный скриптик на PL/SQL создавал многомегабайтный абсолютно безупречный и безошибочный python код, не требующий вообще никакого рефакторинга, поиска багов и тем более каких-либо собственных модификаций, в стиле GW-BASIC - сплошная функция main). Правда, по ходу выяснились ограничения python 2.7.x под Win7 - он не мог осилить такой файл. :) Это было смешно. Пришлось нарезать кусками строк по 40000, тогда скушал.

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

                          Так что все условно. И в конкретном частном случае все может быть совсем по-другому...
                          Сообщение отредактировано: p1qb0d -
                            Цитата Славян @
                            Мы выносим f(x), если её описание длинно, а пользоваться ею придётся не раз, скажем.

                            Ну а если у тебя функция длинная предлинная, а выносишь ты то, что будет использованно ровно 1 раз, то и выносить незачем?

                            Цитата Славян @
                            А вот выносить из функции функцию лишь бы не было goto - однократное занятие, потому и искусственное, а значит - неправильное. ;)

                            Конечно не правильное, если ты будешь выносить из функции функцию лишь бы не было goto. Правильно не использовать goto, а выносить код в отдельную функцию для того - чтобы повысить читабельность кода. Я когда пишу, я не думаю как бы мне вот тут избавится от goto, поэтому по таким причинам код в отдельную функцию никогда и не выношу. А вот вынести код в отдельную функцию чтобы повысить читабельность - не проблема. Пусть даже эта функция в одном месте будет заюзана. Глядишь со временем и в другом месте пригодится.

                            Добавлено
                            Цитата p1qb0d @
                            Это опять же точка зрения рефакторинга, то есть, повторного использования кода. Я писал проги в 200000 строк за 10 минут с использованием CASE технологий (двухкилобайтный скриптик на PL/SQL создавал многомегабайтный абсолютно безупречный и безошибочный python код, не требующий вообще никакого рефакторинга, поиска багов и тем более каких-либо собственных модификаций, в стиле GW-BASIC - сплошная функция main). Правда, по ходу выяснились ограничения python 2.7.x под Win7 - он не мог осилить такой файл. :) Это было смешно. Пришлось нарезать кусками строк по 40000, тогда скушал.

                            Не ври, ты написал двухкилобайтный скриптик который что то там создавал, а не прогу в 200000 строк за 10 минут. Я тоже могу сказать что я писал 100500 строк кода за 30 секунд, тупо создал MFC проект - и у меня все сгенерилось. А чо? Не нужно путать мягкое с теплым.
                            Сообщение отредактировано: KILLER -
                              Цитата KILLER @
                              Ну а если у тебя функция длинная предлинная, а выносишь ты то, что будет использованно ровно 1 раз, то и выносить незачем?
                              Да, незачем. :yes:
                              Цитата KILLER @
                              Правильно не использовать goto, а выносить код в отдельную функцию для того - чтобы повысить читабельность кода.
                              Читабельность от разных непонятных функций не растёт, а наоборот - падает. Вот нет никакого смысла в той моей функции:
                              Цитата Славян @
                              ExpandedWrap disabled
                                int
                                SomeStrangeFunction(...)
                                {
                                   ...
                                   return p;
                                }...
                              А её пришлось городить, так как вы захотели от goto избавиться. :yes-sad:
                              Цитата KILLER @
                              Пусть даже эта функция в одном месте будет заюзана. Глядишь со временем и в другом месте пригодится.
                              Ну значит мы с вами просто по-разному смотрим на код. Бывает! ;)
                                Цитата Славян @
                                Да, незачем. :yes:

                                И пусть у меня функция будет на 5 тысяч строк - верно все?

                                Цитата Славян @
                                Читабельность от разных непонятных функций не растёт, а наоборот - падает.

                                Если они используются? Если да, то кто тебе такое сказал?

                                Цитата Славян @
                                от нет никакого смысла в той моей функции:

                                Конкретно вот в этой - вообще никакого смысла нет. Какие то три точки и возвращается непонятная переменная :-?

                                Цитата Славян @
                                Ну значит мы с вами просто по-разному смотрим на код. Бывает! ;)

                                А вы когда нибудь в своей жизни рефакторили большой код? Ну скажем там проект состоящий из 100 исходных файлов, хотя бы!!! Даже пусть будет не 100, а хотя бы 20цаточка?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 8 9 [10] 11 12 ...  31 32


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0608 ]   [ 15 queries used ]   [ Generated: 7.05.24, 22:49 GMT ]