На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (12) « Первая ... 7 8 [9] 10 11 ... Последняя » все  ( Перейти к последнему сообщению )  
> #define ИЛИ template? , C++
   
#define ИЛИ template
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Qraizer, то что ты описываешь никак не может объяснять нафига юзать goto в коде. По вашим словам получается что в последний раз они код писали в в 98 году что ли? Свежий код, старый, любой код майкрософта пестрит goto.

    Добавлено
    Цитата OpenGL @
    Я ровно такой вариант написал чуть ниже, добавив необходимые проверки.

    Ну у тебя там вызов трех функций в if выражении получился, что действительно в твоем примере смахивает на говно. А у меня сначало все это присваивается указателем. По твоему ты не будешь if пихать на проверку не нулевого указателя или что? Так что либо получается необоснованное с твоей стороны "говно", либо ты что то не договариваешь.

    Цитата OpenGL @
    А проверить это же так тяжелоооо, просто ужас :D

    Ну так я проверил. Метка не подсвечивается в синтаксисе языка. Переход - разве что по F12, но он работает вообще практически на любой конструкции языка, это не для меток сделано. Больше я ничего не нашел :-?

    Цитата OpenGL @
    Прыгать? :lool: Киля, в этой ветке дискуссии речь ведётся о функциях, влезающих в один экран, в которых прыгать никуда не надо априори, и которые с goto тоже бывают более читабельные. Ты специально только делаешь вид, что ведёшь себя глупо, или это результат настоящего и всамделишного полёта мысли? :crazy:

    В этой ветке дискуссии вы приводите либо выдуманные функции, которые занимают 5 строчек кода, и где можно легко обойтись и без goto, либо ссылки на код функций по 150 строчек кода.

    Цитата OpenGL @
    О, надо же. Ты прямым текстом признался, что не читатель. Уважуха! 8-) Не каждый может признать за собой недостатки :yes:

    Где? Ну вот где я признался что я не читатель? Хорошо, если ты согласен что писать goto в С++ оцтой, почему ты тогда пытаешься оправдать код на С++ с использованием goto ? напиши тогда - Да, в С++ вот тут говнецо. А если бы код был бы Сишный, тогда возможно и норм. Тогда к тебе лично вопросы отпадут. Но вы сначало пишите что в С++ никто никогда в проде goto не использовал, мол де есть же RAII, а потом пишите - ну и что тут такого, обычная практика. Да где же это обычная практика, если даже K&R в бородатых 80-х писали что нифига это не нормально даже для Си, ну кроме некоторых случаях. Не для С++, а для Си!!!

    А вы мне втираете - что это чуть ли не единственный способ решить задачу очистки ресурсов.

    Добавлено
    Короче ладно. Хватит переливать из пустого в порожнее. Я по прежнему остался при своем. goto используют люди из за ограниченности мышления, либо из за лени ну и в качестве костылей. Больше ему нет нигде нормального применения.
    Если будете возражать, попробуйте придумать задачу, нормальную, не костыль вставить, а обычную такую задачу, где без него не обойтись. Тогда будем говорить. а так реально уже задолбало. выходит разговор глухого со слепым.
    Сообщение отредактировано: KILLER -
      Цитата KILLER @
      Больше ему нет нигде нормального применения.

      А как же явный оверхед при замене функционала?
      Или ты что, реально решил померятmся таймерами штоле?
        Цитата KILLER @
        Ну у тебя там вызов трех функций в if выражении получился, что действительно в твоем примере смахивает на говно. А у меня сначало все это присваивается указателем. По твоему ты не будешь if пихать на проверку не нулевого указателя или что? Так что либо получается необоснованное с твоей стороны "говно", либо ты что то не договариваешь.

        А, то есть ты даже не видишь, что, вставив проверки в твой код, ты получишь ровно то, что написано у меня? :lool:

        Цитата KILLER @
        Метка не подсвечивается в синтаксисе языка.

        Логично - по дефолту она того же цвета, что и остальной текст. Но ты в настройках волен поменять цвет хоть на серобуромалиновый :D

        Цитата KILLER @
        Переход - разве что по F12, но он работает вообще практически на любой конструкции языка, это не для меток сделано

        И что? :crazy:

        Цитата KILLER @
        В этой ветке дискуссии вы приводите либо выдуманные функции, которые занимают 5 строчек кода, и где можно легко обойтись и без goto, либо ссылки на код функций по 150 строчек кода.

        Невнушабельно. Давай для пущей убедительности функции в 1 строку с одной стороны, и 424242 строки - с другой :crazy:

        Цитата KILLER @
        Да где же это обычная практика, если даже K&R в бородатых 80-х писали что нифига это не нормально даже для Си, ну кроме некоторых случаях.

        И это притом, что в книге есть цитата наподобие "впрочем, покажем примеры, где goto может быть в тему"? :crazy:

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

        Ну в этом, полагаю, никто тут не сомневается - что факты не способы поколебать твою упёртость истина достаточно очевидная :D
        Сообщение отредактировано: OpenGL -
          Цитата KILLER @
          Qraizer, то что ты описываешь никак не может объяснять нафига юзать goto в коде. По вашим словам получается что в последний раз они код писали в в 98 году что ли? Свежий код, старый, любой код майкрософта пестрит goto.

          Нет. Просто не меняют однажды вымученное из-за ограничений, но работающее. А что, надо сразу же броситься тут же отперерефактнить всё нахрен? Платишь?
          Знаешь ли, когда половина проекта в одной парадигме, другая в другой – это тоже говнокод. Так что ежели чё там новое добавляется, хотя, насколько мне известно, MS давно положила болт на развитие MFCей с ATLями, так уж пусть будет лучше в едином стиле.

          Добавлено
          Цитата KILLER @
          напиши тогда - Да, в С++ вот тут говнецо. А если бы код был бы Сишный, тогда возможно и норм.
          Ну я фактически именно это и сделал. Запостил код на C, и попозже два его аналога на C++.

          Добавлено
          Цитата KILLER @
          А вы мне втираете - что это чуть ли не единственный способ решить задачу очистки ресурсов.
          Почему единственный-то? Наглядный, простой и быстрый. Другие "вычеркните что-нибудь одно и приходите к нам" ©.

          Добавлено
          Цитата KILLER @
          Больше ему нет нигде нормального применения.
          Он находит применение в неструктурных алгоритмах. Представь себе блоксхему с входом/выходом в/из середины. Не встречал? Ну что сказать, бывает...
            Цитата OpenGL @
            А, то есть ты даже не видишь, что, вставив проверки в твой код, ты получишь ровно то, что написано у меня? :lool:

            У тебя проверяется результат функции, а в моем случае будет проверка указателей. Ну конечно, одно и то же. ты небось еще и в циклах пишешь нечто подобное?
            ExpandedWrap disabled
              for(SomeIteratorObject ItObj = GetBegin(); ItObj != GetHeavyEnd(); ++ItObj)

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

            Добавлено
            Цитата OpenGL @
            Логично - по дефолту она того же цвета, что и остальной текст. Но ты в настройках волен поменять цвет хоть на серобуромалиновый :D

            Цвет чего? У меня цвет поменяет только метка? Или остальные идентификаторы тоже?

            Добавлено
            Цитата Qraizer @
            Знаешь ли, когда половина проекта в одной парадигме, другая в другой – это тоже говнокод.

            Ну как не крути у них и так говнокод и так говнокод, потому что у них есть примеры без goto. Значит они нарушают свою парадигму с goto. Выходит ведь так?

            Добавлено
            Цитата Qraizer @
            Он находит применение в неструктурных алгоритмах. Представь себе блоксхему с входом/выходом в/из середины. Не встречал? Ну что сказать, бывает...

            Вообще то я речь завел не о блоксхемах и не о микроконтроллерах каких нибудь. Речь шла про код майкрософта. goto говнокодом был что в 80-х, что сегодня.

            Но ваше право отмазывать майкрософт за их говнокод.
              KILLER, ты или бесконечно наивен, или так же бесконечно идеалист :) Ну не бывает так, что б в коммерческой компании, не страдающей долей альтруизма, взяли и начали переписывать то, что работает и проверено временем, просто потому, что стандарт поменялся, парадигмы появились и так далее по списку. С формальной точки зрения ты, конечно, прав. Ковырял как-то утёкший код Win2k, местами я ещё в свои первые годы писал лучше, чем то, что было там. Но то, что было там, оно работало. И, скорее всего, работает до сих пор где-то в оставшихся системных утилитах, вроде той же очистки диска. Так зачем это трогать? Что в итоге выиграет корпорация?
                Цитата B.V. @
                Ну не бывает так, что б в коммерческой компании, не страдающей долей альтруизма, взяли и начали переписывать то, что работает и проверено временем, просто потому, что стандарт поменялся, парадигмы появились и так далее по списку.

                Я это очень прекрасно понимаю. И так уж и быть не буду с этим спорить. Пусть будет так. На рефакторинг нужны человекочасы, это определенные трудозатраты и так далее. Но! Но ведь от этого код то лучше не станет? Ведь верно? Если что это риторический вопрос касательно тебя, потому как в следующем предложении ты на него ответил, и я с тобой соглашусь:
                Цитата B.V. @
                С формальной точки зрения ты, конечно, прав.


                Добавлено
                Цитата B.V. @
                Так зачем это трогать? Что в итоге выиграет корпорация?

                Да мне то, по большому счету вообще пофигу какой у них там код, пусть хоть все на goto перепишут. Я не работаю в майкрософт, и не занимаюсь рефакторингом или поддержкой их кода. Я юзаю их функции/классы/библиотеки, работает, да и ладно. Просто спор был конкретно об неком коне в вакууме. Лично я считаю что их код местами лютый говнокод. Это лично мое мнение. Есть у них и очень навороченный код, до которого я даже не дорос еще. Вот по сути и все.
                Просто меня начали убеждать, на сколько я понял - поменять свое мнение о их коде, который я считаю говнокодом.

                Добавлено
                Цитата OpenGL @
                И это притом, что в книге есть цитата наподобие "впрочем, покажем примеры, где goto может быть в тему"? :crazy:

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

                Добавлено
                Цитата Qraizer @
                Почему единственный-то? Наглядный, простой и быстрый. Другие "вычеркните что-нибудь одно и приходите к нам" ©.

                Ну извиняй, не так сформулировал, я имел ввиду "А вы мне втираете - что это чуть ли не единственный рассово верный способ решить задачу очистки ресурсов."
                Посмотри код что привел OpenGL, я не знаю задачу целиком, но его псевдокод - можно легко переписать без goto. И тем не менее, в начале дискуссии он в принципе соглашался с моей позицией. А сейчас кричит, что любой другой вариант - говно нечитабельное, а с goto - ну просто супер пупер код. Я сейчас конкретно не тебя обвиняю Qraizer. Я сейчас просто показываю уровень аргументации.
                И ты писал, что в проде не припомнишь чтоб goto юзал. Думаю на Си ты писал побольше чем мы с OpenGL вместе взятые умножить на 10. И тем не менее - я не совсем пониманию твою позицию. То ли ты goto пытаешься отмазать, то ли код майкрософта. При этом из всех споров про goto, я так понял что ты бы его юзнул, в исключительной ситуации. А не как правило. Так я думаю это абсолюнто всех касается, и меня в том числе.
                Но приведенные примеры - не являются исключительными ситуациями имхо. Вот взять хотя бы твой код, который вчера я переписывал без goto. Сколько у автора улетело времени на его написание? И почему он сделал именно вот так, а не по другому? Ведь там функция довольно сложная вышла, даже без goto, ее по хорошему нужно было смело бить на три. RestoreStateFromFile, SaveStateFromFile, ну и собственно алгоритм счетчиками. Почему он так не сделал? Мне лично не понятно. Более того, там не goto ломает читабельность, а вырвиглазные reinterpret_cast<char*>(trololo)

                Добавлено
                Цитата JoeUser @
                А как же явный оверхед при замене функционала?
                Или ты что, реально решил померятmся таймерами штоле?

                Какой оверхед еще? 3 процессорные инструкции оверхед или что?
                Сообщение отредактировано: KILLER -
                  Цитата KILLER @
                  У тебя проверяется результат функции, а в моем случае будет проверка указателей.

                  Киля, ты не разглагольствуй, а покажи кодом эти все проверки. Вот вернула build1 ошибку (да пусть даже упростим и предположим, что она только один указатель возвращает, хотя это не так), а значит требуемые для последующих этапов данные не готовы. Надо освободить то, что уже насоздавалось. Твои действия? :rolleyes:

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

                  Потому что все эти построения делаются в рамках одного единого и неделимого алгоритма, смысл каждой части которого существует только в контексте остальных частей. К тому же алгоритма не особо-то и большого (данная функция занимает всего-то чуть больше 100 строк) и не особо сложного, учитывая, что коллега вот буквально сегодня без моей подсказки быстро внёс в него необходимые изменения, и, я уверен, внёс бы, если бы писалось всё на си с goto. И смысл тогда разбивать алгоритм на функции с кучей параметров, если это только затруднит последующий анализ и займёт больше места, не дав взамен ничего, кроме отсутствия предмета твоей религиозной ненависти? :D

                  Цитата KILLER @
                  Цвет чего? У меня цвет поменяет только метка? Или остальные идентификаторы тоже?

                  Зайди уже в настройки студии, а <_< Как минимум 2015 и выше - настройка цвета меток есть.
                    Цитата OpenGL @
                    Вот вернула build1 ошибку (да пусть даже упростим и предположим, что она только один указатель возвращает, хотя это не так), а значит требуемые для последующих этапов данные не готовы.

                    То ты меня высмеиваешь за то, что я написал то же самое. То задаешь какие то глупые вопросы относительно моего кода. Я ж тебе по функциям расписал. внутри каждой функции есть свой клинап(под ним можешь подразумевать как раз обработку ошибки, произошедшую внутри конкретного конструктора структуры). Если что то не получилось - тебе функция вернет нулевой указатель. Ну а дальше я просто не стал писать if, который ты за меня написал в своем дополнении к своему коду. :-?

                    Цитата OpenGL @
                    Потому что все эти построения делаются в рамках одного единого и неделимого алгоритма, смысл каждой части которого существует только в контексте остальных частей.

                    А что значит неделимый алгоритм? Псевдокод ты написал как раз таки делимый. :-?

                    Цитата OpenGL @
                    И смысл тогда разбивать алгоритм на функции с кучей параметров, если это только затруднит последующий анализ и займёт больше места, не дав взамен ничего, кроме отсутствия предмета твоей религиозной ненависти? :D

                    Ну то что ты привел псевдокодом - бьеться легко на функции. Я же не виноват, что ты не можешь выразить суть задачи псевдокодом. :-?
                    Более того, то что ты привел - я не вижу там смысла писать goto даже на Си. Ну вот не вижу в упор.

                    Понимаешь, goto можно влепить куда угодно. И обосновать это твоими словами. Так спорить сложно. Я ожидал, что ты приведешь нечто, что поставит меня в тупик, и вынудит с тобой согласится. А на деле выходит так, что ты приводишь то, что легко переписывается и без goto, но делаешь упор на то, что если бы ты писал на Си, то написал бы обязательно goto(как будто без него пиндец как больно было бы), и твой код все бы поняли. :-?

                    Я уверен что можно что угодно переписать на goto - и это даже будет понятно. Но зачем писать с goto, если можно написать и без goto? Вот в чем вопрос.

                    Цитата OpenGL @
                    Зайди уже в настройки студии, а <_< Как минимум 2015 и выше - настройка цвета меток есть.

                    Хз, я не нашел :-? Да и раньше я писал, что все не ограничивается одной только MSVS.

                    Добавлено
                    По поводу настроек студии, ты можешь не заморачиваться. Я особо и не искал. Ну если есть такая возможность, покрасить отдельно метку в студии - ну есть так есть. Мне в принципе хватает того, что по умолчанию она не покрашена. Дело в том, что в настройки студии я не особо лазаю, так как не ограничен одной только студией.
                    А вот переход по меткам - было бы интересно услышать как настроить. Может когда пригодится. Я нашел только go to definition, но оно работает в одну сторону, и предназначено не для скакания по меткам.
                      Цитата KILLER @
                      Я ж тебе по функциям расписал. внутри каждой функции есть свой клинап(под ним можешь подразумевать как раз обработку ошибки, произошедшую внутри конкретного конструктора структуры)

                      Нет у функций никакого cleanup - всё, что было создано на предыдущих этапах (включая часть вспомогательных данных, нужных только для построения, т.е. результат работы первого цикла - не один, грубо говоря, массив, а несколько) нужно и на последующих, поэтому единственное место, где всё удаляется - главный cleanup.
                      Или всё гораздо (нет, ГОРАЗДО) хуже, и ты предлагаешь удалять, например, результаты успешного build1 при неуспехе build2 - в cleanup секции в build2, а также в build3 в случае его неуспеха, куда мы придём в случае успеха build2, и ещё дополнительно - в главной секции cleanup, куда мы придём в случае успеха вообще всего? :crazy:

                      Цитата KILLER @
                      Ну то что ты привел псевдокодом - бьеться легко на функции.

                      Разумеется, бъётся. Только толку-то? :D
                      Сообщение отредактировано: OpenGL -
                        Цитата KILLER @
                        А вот переход по меткам - было бы интересно услышать как настроить. Может когда пригодится.
                        Можно на метках закладки сразу ставить (Ctrl+K/K), дабы опосля по ним F2 шлёпать.
                          Цитата Славян @
                          Можно на метках закладки сразу ставить (Ctrl+K/K), дабы опосля по ним F2 шлёпать.

                          Славян, про закладки я знаю, иногда даже активно использую, если код запутанный. И раньше писал, что мне видится разве что только закладками метки помечать, чтоб по ним прыгать. Но - это ведь их нужно для начала расставить. А это уже потеря времени, ради понимания происходящего.

                          Добавлено
                          Цитата OpenGL @
                          Нет у функций никакого cleanup - всё, что было создано на предыдущих этапах (включая часть вспомогательных данных, нужных только для построения, т.е. результат работы первого цикла - не один, грубо говоря, массив, а несколько) нужно и на последующих, поэтому единственное место, где всё удаляется - главный cleanup.
                          Или всё гораздо (нет, ГОРАЗДО) хуже, и ты предлагаешь удалять, например, результаты успешного build1 при неуспехе build2 - в cleanup секции в build2, а также в build3 в случае его неуспеха, куда мы придём в случае успеха build2, и ещё дополнительно - в главной секции cleanup, куда мы придём в случае успеха вообще всего? :crazy:

                          Мне сложно парировать не зная сути задачи. Извини, но все тузы в данном случае у тебя на руках, а я играю в слепую. Я так не могу спорить.
                            Цитата KILLER @
                            Ну извиняй, не так сформулировал, я имел ввиду "А вы мне втираете - что это чуть ли не единственный рассово верный способ решить задачу очистки ресурсов."
                            И ничего не поменялось. Простой, быстрый, понятный, но уж точно не единственный. KILLER, просто присмотрись: это ровно тот же самый __finally с __leave, только сделан руками, потому что язык встроенных средств не имеет, а компилятор подходящих расширений языка.
                            Цитата KILLER @
                            И ты писал, что в проде не припомнишь чтоб goto юзал. ... То ли ты goto пытаешься отмазать, то ли код майкрософта. При этом из всех споров про goto, я так понял что ты бы его юзнул, в исключительной ситуации. А не как правило.
                            Ну да. Я знаю средства, предоставляемые мне языком, понимаю их достоинства и недостатки, знаю "правила хорошего тона", и не имею предрассудков в аккумуляции всего при принятии решений. Если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь. И это справедливо для любых других средств, той же рекурсии, например. Или не дай бог switch(). Ну и если некий код вызывает вопросы типа "нахрена так", то это не означает автоматически, что он плохой. Возможно, были причины написать именно так, которых мы не знаем. Другое дело, чтобы из-за этого "нахрена" коду плохо не стало. Вот на это надо смотреть. Ну так и не стало же. Сколько ссылок ты не давал, столько раз я и приходил к выводу, что мол, да, странно, но вот так тоже нормально, плохих последствий не имеет.
                            Кстати вот, а почему у тебя switch() не вызывает отторжения? Это же самая что ни на есть неструктурная конструкция, похлеще goto, я бы сказал: у того хоть метка одна, а тут куча, ветвление динамическое по результату выражения, а не статически в конкретную метку, да ещё и без контроля границ вариантов, как было бы при вложенных if()/else. И ещё кстати, на предмет вложенных if(): приемлемая глубина вложения как-то коррелирует с таковой для циклов?
                            Вишь, сколько вопросов, на которые однозначных ответов нет и быть не может.
                            Цитата KILLER @
                            Сколько у автора улетело времени на его написание? И почему он сделал именно вот так, а не по другому? Ведь там функция довольно сложная вышла, даже без goto, ее по хорошему нужно было смело бить на три. RestoreStateFromFile, SaveStateFromFile, ну и собственно алгоритм счетчиками. Почему он так не сделал?
                            Ну, автором был я. Восстанавливал код по памяти, изначально это был такой же полусинтетический пример для другого ресурса, давно почившего лет за 10 до этого. А тот в свою очередь являлся выжимкой некой вполне практической задачи, писавшейся для однозадачной DOS. Код сохранения/восстановления внедрялся в уже готовую программу, когда выяснилось, что программа будет работать слишком долго, и не факт, что всё это время комп не понадобится для более срочных задач. Почитай, более 20-и лет назад, откуда я помню-то истоки.
                            Цитата KILLER @
                            Более того, там не goto ломает читабельность, а вырвиглазные reinterpret_cast<char*>(trololo)
                            Ну, это не ко мне. Бинарный ввод/вывод у потоков диктует char*, что тут сделаешь.
                            Сообщение отредактировано: Qraizer -
                              Цитата Qraizer @
                              это ровно тот же самый __finally с __leave, только сделан руками, потому что язык встроенных средств не имеет, а компилятор подходящих расширений языка.

                              __finally говно еще то, по крайней мере в С++. Я так понимаю - это уже из области SEH исключений? Я сталкивался с этим, и очень плотно сталкивался, и матюкался и плевался. Потому что когда ты попадаешь в этот блок - фрейм стека теряется напрочь, и ты ничего не можешь сделать, вернее можешь - но это все нужно делать вручную, чтоб сохранить фрейм стека. В Си - возможно это благо и чудо, я не буду спорить, потому как в Си я с этим не работал, но там нет и классов. А я с этой херней работал именно в С++ и с классами. Правда было это довольно давненько, лет 5 назад, а то и 8. Деталей я не помню сейчас. Но! вся эта шняга типа __finally нужна для конкретных вещей. А goto - не нужен для конкретных вещей. И если вылетит Access Violation - __finally в принципе может как то помочь, а вот goto - нет. Потому что это два разных уровня взаимодействия с программой.
                              Я могу ошибаться конечно, может я что подзабыл или ты что то другое имел ввиду. Я не знаю.

                              Цитата Qraizer @
                              Ну да. Я знаю средства, предоставляемые мне языком, понимаю их достоинства и недостатки, знаю "правила хорошего тона", и не имею предрассудков в аккумуляции всего при принятии решений.

                              Тогда довольно странно слышать от тебя что ты goto в прод не коммитил. :scratch:

                              Цитата Qraizer @
                              Если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь.

                              Если бы у бабушки были яйца, то она была бы дедушкой. Мне видится что это из той же оперы. Я могу тебе сказать ровно то же самое. Вот зуб даю, если я увижу, что goto конкретно вот тут не проявляет своих отрицательных сторон, но в сравнении с другими средствами проявляет положительные, заюзаю и не поморщусь, но пока у меня таких ситуаций не было. А у тебя были? Я имею ввиду не на велосипедах? И да я читать умею. Знаю что не были. Ну так тогда о чем речь ? :D

                              Цитата Qraizer @
                              И это справедливо для любых других средств, той же рекурсии, например. Или не дай бог switch().

                              Конечно.

                              Цитата Qraizer @
                              Ну и если некий код вызывает вопросы типа "нахрена так", то это не означает автоматически, что он плохой. Возможно, были причины написать именно так, которых мы не знаем. Другое дело, чтобы из-за этого "нахрена" коду плохо не стало. Вот на это надо смотреть. Ну так и не стало же. Сколько ссылок ты не давал, столько раз я и приходил к выводу, что мол, да, странно, но вот так тоже нормально, плохих последствий не имеет.

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

                              Цитата Qraizer @
                              Кстати вот, а почему у тебя switch() не вызывает отторжения?

                              Незнаю :-? Но скажу честно, я не припомню когда я использовал switch в последний раз. Хотя могу сказать наверняка - я точно его использовал несколько раз.

                              Цитата Qraizer @
                              Ну, автором был я. Восстанавливал код по памяти, изначально это был такой же полусинтетический пример для другого ресурса, давно почившего лет за 10 до этого. А тот в свою очередь являлся выжимкой некой вполне практической задачи, писавшейся для однозадачной DOS. Код сохранения/восстановления внедрялся в уже готовую программу, когда выяснилось, что программа будет работать слишком долго, и не факт, что всё это время комп не понадобится для более срочных задач. Почитай, более 20-и лет назад, откуда я помню-то истоки.

                              Ну если это было давно по молодости - то тогда это многое объясняет и все становится понятно, и я претензий никаких не имею. Я по молодости так же не гнушался использовать макросы вместо констант, и goto, и писал еще похуже трешаки. Я просто думал что этот код ты выдрал с прода, для демонстрации возможностей goto. Ну в принципе даже по той первой теме, из за этого кода срач вышел на десяток страниц помница. Не каждый так сможет написать. :D

                              Цитата Qraizer @
                              Ну, это не ко мне. Бинарный ввод/вывод у потоков диктует char*, что тут сделаешь.

                              Ну меня в основном запутало именно сохранение состояния. Я поначалу думал что оно играет какую то важную роль в алгоритме и является неотъемлемой частью цикла. Пока не вынес это в отдельную функцию.
                              Еще очень смутили конструкции типа
                              ExpandedWrap disabled
                                ok = ok && read/write file

                              Но по началу я не придал им значения, пока не присмотрелся пристально, а что же там происходит, и нафига именно вот так.
                              Сообщение отредактировано: KILLER -
                                Цитата KILLER @
                                __finally говно еще то, по крайней мере в С++. Я так понимаю - это уже из области SEH исключений? Я сталкивался с этим, и очень плотно сталкивался, и матюкался и плевался. Потому что когда ты попадаешь в этот блок - фрейм стека теряется напрочь, и ты ничего не можешь сделать, вернее можешь - но это все нужно делать вручную, чтоб сохранить фрейм стека. В Си - возможно это благо и чудо, я не буду спорить, потому как в Си я с этим не работал, но там нет и классов. А я с этой херней работал именно в С++ и с классами. Правда было это довольно давненько, лет 5 назад, а то и 8. Деталей я не помню сейчас. Но! вся эта шняга типа __finally нужна для конкретных вещей. А goto - не нужен для конкретных вещей. И если вылетит Access Violation - __finally в принципе может как то помочь, а вот goto - нет. Потому что это два разных уровня взаимодействия с программой.
                                В таком случае, как обычно в таких случаях и советуется, причём далеко не только мной, советую изучить матчасть по SEH. Сейчас, увы, Wolfenstein II ждёт, но попозже я накатаю кратенюсенький ликбез. Пока и коротко – C++EH в MS-ных компилерах по WinAPI основан как раз на SEH, так что любая твоя программа с исключениями под капотом юзает SEH на полную катушку. И даже больше: SEH нередко задействуется и при return, и при continue и break, и при longjmp(), и – да ты и так догадался – при goto. Причём я сейчас не о C++.

                                Добавлено
                                Цитата KILLER @
                                Я могу тебе сказать ровно то же самое.
                                Ну вот я которую страницу и не понимаю, объчём сыръбор.
                                Цитата KILLER @
                                Но ты ведь задумаешься - а можно ли избавится от этого и как? Или не будешь задумываться? Если ты не будешь задумываться - значит ты стороник goto.
                                Задумаюсь. Прикину стоимость редизайна, поставлю рядом величину его профита и ...тут может случиться по-разному. Скорее всего, если код написан на GWBasic в стиле соседа Пупкина, редизайн окупится, если же ты имеешь в виду код, подобный на который ты приводил ссылки, то запросто может и не окупиться.
                                Я не сторонник или несторонник goto, я сторонник структурных решений и несторонник неструктурных. Современные языки предлагают полный спектр для реализации структурных решений, поэтому места для goto в программах практически не остаётся. Реалии однако таковы, что структурные решения не всегда бывают оправданными своей стоимостью реализации. Но, слава богу, весьма нечасто, и это хорошо. Для неструктурных решений многие языки предлагают только goto. Иногда ещё исключения подойдут. Глупо не пользоваться нужной фичей, когда она есть, и городить вместо это структурный костыль. Это не лучше, чем пытаться заменить множественное наследование агрегацией.
                                Цитата KILLER @
                                Я по молодости так же не гнушался использовать макросы вместо констант, и goto, и писал еще похуже трешаки.
                                Та какая разница. По молодости я изначально не подумал, что понадобится сохранять/восстанавливать состояние? Так я и сейчас могу об этом не подумать. Заюзал бы я сейчас в подобной ситуации goto? Когда код с ним написан за пять минут, не нуждается в отладке, прост, понятен и производителен? Обязательно.
                                Сообщение отредактировано: Qraizer -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0755 ]   [ 18 queries used ]   [ Generated: 26.04.24, 09:03 GMT ]