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

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

    Цитата JoeUser @
    Ошибаешься, это - эталон эталонов говна! Ну бывают такие взаимосвязи в состояниях систем, что да - хочется срать говном. Но если на кону зарплата/гонорар - засунь себе уникальный поинтер в жопу, но просто сделай, чтобы работало.

    :lool: Это так ты решил оправдать свой пример, которому просил хорошую альтернативу, а все идеи тут же раскритиковал? :D Я такое даже в пьяном угаре бы не смог написать под дулом пистолета. Потому что в этом запутаться можно по ходу написания этого говна.

    Цитата JoeUser @
    И это все потому, что - Я ЛУЧШИЙ в говне!

    С чем тебя и поздравляю!

    Цитата JoeUser @
    Я уже 10 лет работаю сам на себя. Максимум - расстреляют, но я не лезу в политику, не митингую. Ну если только изредка, устраиваю молчаливый пикет с вискарем - дома 8-) Мечтаю съездить в Париж, поссать с Эйфелефой башни, ибо построить такую мне мешает Путин!

    В С++ идиома RAII появилась вместе с появлением классов и деструкторов. Т.е. ей больше 10 лет, идея простая и безотказная как топор, очень странно видеть людей, которые пишут вроде на С++, но с основной его идеей не знакомы, и пытаются выдумать какую то чушь, используя всякий бред типа goto там, где ему не место.

    Ты ведь должен понимать что твои примеры - нечитабельны от слова совсем, плохо подвержены рефакторингу, не устойчивы к различным ошибкам, и сами являются кладезью подводных камней? Хотя о чем это я....
      korvin, пока я не заснул - давай переписывай! :lol:

      Следи за движениями:

      1) lv = init1(&r1); // произошла инициализация USB-драников
      2) cv1 = init2(&r2); // попытка инициализации USB-бетономешалки, но она сломалась в обед!

      Не удается залить соседа бетоном - облом!!! Мож хоть драников поедим??? Но, чудя по твоему коду, мы не дождемся драников - release2(r1); Короче, драники отдавай, да?!
        Цитата Wound @
        а все идеи тут же раскритиковал?

        И ничего я не критиковал! И вааще всем сенксы, что тратите время на меня. А если будет альтернативный (эталонно-качественный код) - гарантирую УВАЖУХУ!!!

        Цитата Wound @
        Я такое даже в пьяном угаре бы не смог написать под дулом пистолета. Потому что в этом запутаться можно по ходу написания этого говна.

        Молод ты еще - прокачивай IQ. Это пригодиться для оценки нестандартных систем. Да и говна в голове будет меньше, ибо - ты познаешь дзен.

        Цитата Wound @
        В С++ идиома RAII появилась вместе с появлением классов и деструкторов. Т.е. ей больше 10 лет, идея простая и безотказная как топор, очень странно видеть людей, которые пишут вроде на С++, но с основной его идеей не знакомы, и пытаются выдумать какую то чушь, используя всякий бред типа goto там, где ему не место.

        Полностью с тобой согласен!

        Цитата Wound @
        Ты ведь должен понимать что твои примеры - нечитабельны от слова совсем, плохо подвержены рефакторингу, не устойчивы к различным ошибкам, и сами являются кладезью подводных камней? Хотя о чем это я....

        Не согласен вот тут с тобой совсем!!!

        GOTO - КЛАССНАЯ ВЕЩЬ!!! Это - раритет, это олд-сулл, это модно, спортивно и УЖЕ молодежно!!!

        Или не? ;)
          Цитата JoeUser @
          Молод ты еще - прокачивай IQ. Это пригодиться для оценки нестандартных систем. Да и говна в голове будет меньше, ибо - ты познаешь дзен

          Хорошая отмазка :lol:


          Цитата JoeUser @
          Полностью с тобой согласен!

          А приводишь говно какое то, и еще кичишься, когда тебе приводят эталонные решения.

          Цитата JoeUser @
          Не согласен вот тут с тобой совсем!!!

          Это от того что ты не работаешь с крупными проектами. Пишешь себе там как ИП, сам потом свое же и ковыряешь. Я многого повидал, но таких говнокодов не видел.

          Цитата JoeUser @
          GOTO - КЛАССНАЯ ВЕЩЬ!!! Это - раритет, это олд-сулл, это модно, спортивно и УЖЕ молодежно!!!

          Ну писать говно подобное тому что ты выше приводил - самое то. Его(goto) можно использовать, но его необходимо использовать с пользой, в твоих примерах пользы от него 0, больше негатива.
          Сообщение отредактировано: Wound -
            Цитата Wound @
            приводят эталонные решения

            Не, не видел ... один свистеж :lol:

            Цитата Wound @
            Я многого повидал, но таких говнокодов не видел.

            Не сдерживай себя - гони по полной! Эти твари, создатели libssh2 тебя явно недостойны, гавнюки!!!
            Я то-типа копипастер (рядом стоял), это все они - недостойные!!!

            Цитата Wound @
            Ну писать говно подобное тому что ты выше приводил - самое то

            Просто у тебя не достаточно опята, чтобы осознать всю красоту ПРЕКРАСНОГО GOTO!!!
            Просто не дорос, не прочувствовал, не осознал. Не парься - все это лечит время.
              Цитата JoeUser @
              Не, не видел ... один свистеж :lol:

              Ты их критиковал! А теперь говоришь - не видел. :lol:

              Цитата JoeUser @
              Не сдерживай себя - гони по полной! Эти твари, создатели libssh2 тебя явно недостойны, гавнюки!!!
              Я то-типа копипастер (рядом стоял), это все они - недостойные!!!

              Причем тут они? Ты их код привел? И чего? Он от этого лучше не стал, как был говном - так и остался.
              Что ты сказать то хотел, я не понимаю? Ровно такого же кода тонны можно встретить в MSDN - писали там индусы, видимо libssh2 писали тоже индусы :-?

              Цитата JoeUser @
              Просто у тебя не достаточно опята, чтобы осознать всю красоту ПРЕКРАСНОГО GOTO!!!
              Просто не дорос, не прочувствовал, не осознал. Не парься - все это лечит время.

              Да? А мне кажется это ты деградировал до уровня, лепить goto туда где он нафиг не упал.
                JoeUser, плохой пример. Прочти про RAII и попробуй сам набросать код. Потом можно тут обсудить будет.

                Сразу замечу, что обертку нужно писать(или не нужно, если использовать умные указатели) не на каждый объект ресурса, а только на каждый тип, после чего обертка может быть использована везде, где идет работа с этим ресурсом, и код станет гораздо чище.
                Сообщение отредактировано: D_KEY -
                  Цитата D_KEY @
                  oeUser, плохой пример. Прочти про RAII и попробуй сам набросать код. Потом можно тут обсудить будет.

                  Сразу замечу, что обертку нужно писать(или не нужно, если использовать умные указатели) не на каждый объект ресурса, а только на каждый тип, после чего обертка может быть использована везде, где идет работа с этим ресурсом, и код станет гораздо чище.

                  Ага! Я за все это время не смог прочитать про RAII, и не смог его стопицот раз осознать?!! Ты это серьезно???

                  А я тебе предлагаю переработать свой код - и показать всю красоту красот. Есть и реальный код, есть и "синтетика". Все есть в обсуждении - жду пруфы в виде красивого кода. Без кода - буквы читать не буду. Нафик.
                    Цитата JoeUser @
                    А я тебе предлагаю переработать свой код - и показать всю красоту красот. Есть и реальный код, есть и "синтетика". Все есть в обсуждении - жду пруфы в виде красивого кода. Без кода - буквы читать не буду. Нафик.

                    Так ты расскажи что в моем коде не так? Ты код korvin что то там критиковал, а на мой не обратил внимания?

                    Добавлено
                    Мой код займет меньше твоего по количеству строчек. Туда еще три строчки добавить только осталось чтоб полностью имтировать твой пример ;)
                      Цитата JoeUser @
                      Ага! Я за все это время не смог прочитать про RAII, и не смог его стопицот раз осознать?!!

                      Я не могу знать, что ты там осознал :)
                      Но пишешь ты так, как будто не понял, да.

                      Добавлено
                      Цитата JoeUser @
                      А я тебе предлагаю переработать свой код - и показать всю красоту красот.

                      Ты имеешь в виду свой код с goto отсюда?
                      Ну хорошо, приведу на днях свой вариант.
                      Сообщение отредактировано: D_KEY -
                        Цитата JoeUser @
                        49 совершенно неправильных строчек - лишили меня дозы адреналина
                        Видишь ли, JoeUser, ты начал с очень известного и прекрасно себя зарекомендовавшего паттерна для C, который, ввиду того, что переписываешь его на C++, естественно тебе не понравился, ибо в Плюсах его можно переписать архитектурно иначе, и с тобой по этому поводу начали дискуссию, а тут синтезировал совсем другой код, под исходный очень известный и прекрасно себя зарекомендовавший паттерн для C не попадающий. Почему у начавших дискуссию нет желания им заниматься, думаю, удивляться не стоит.
                        Сообщение отредактировано: Qraizer -
                          JoeUser, у нормальных плюсовиков это будет выглядеть хотя бы так
                          ExpandedWrap disabled
                            // Ресурс libssh_init/libssh_exit
                            struct SshInit
                            {
                                bool initialized;
                                SshInit(bool init_flag = false) : initialized(init_flag) {}
                             
                                SshInit(SshInit &&old) noexcept { old.initialized = false; }
                             
                                SshInit &operator=(SshInit &&old) noexcept { old.initialized = false; }
                             
                                ~SshInit()
                                {
                                    if (initialized) libssh2_exit();
                                }
                            };
                             
                            // Ресурс socket/close
                            struct Socket
                            {
                                int socket;
                                Socket(int s = -1) : socket(s) {}
                             
                                Socket(Socket &&old) noexcept
                                {
                                    socket     = old.socket;
                                    old.socket = -1;
                                }
                                Socket &operator=(Socket &&old) noexcept
                                {
                                    deinit();
                                    socket     = old.socket;
                                    old.socket = -1;
                                    return *this;
                                }
                             
                                ~Socket() { deinit(); }
                             
                                void deinit()
                                {
                                    if (socket != -1)
                                    {
                            #ifdef WIN32
                                        closesocket(sock);
                            #else
                                        close(socket);
                            #endif
                                    }
                                }
                            };
                             
                            // Ресурс libssh_session_init/libssh_session_free
                            struct Session
                            {
                                LIBSSH2_SESSION *session;
                                Session(LIBSSH2_SESSION *s) : session(s) {}
                             
                                Session(Session &&old) noexcept
                                {
                                    session     = old.session;
                                    old.session = nullptr;
                                }
                                Session &operator=(Session &&old) noexcept
                                {
                                    deinit();
                                    session     = old.session;
                                    old.session = nullptr;
                                    return *this;
                                }
                             
                                ~Session() { deinit(); }
                             
                                void deinit()
                                {
                                    if (session)
                                    {
                                        libssh2_session_disconnect(session, "Normal Shutdown, Thank you for playing!");
                                        libssh2_session_free(session);
                                    }
                                }
                            };
                             
                            sftp_error slotLoginInternal()
                            {
                                struct addrinfo hint;
                                struct addrinfo *addrs;
                                struct sockaddr_in *sin;
                                const char *fingerprint;
                                struct addrinfo *p;
                                int ret;
                                bool found;
                             
                                // инициализация библиотеки
                                if (libssh2_init(0) != 0)
                                {
                                    return sftp_error::libssh2_error
                                }
                             
                                SshInit local_ssh(true);
                             
                                // поиск адреса хоста
                                memset(&hint, 0, sizeof(hint));
                                hint.ai_flags    = AI_NUMERICHOST;
                                hint.ai_family   = AF_UNSPEC;
                                hint.ai_socktype = SOCK_STREAM;
                                hint.ai_protocol = IPPROTO_TCP;
                                ret              = getaddrinfo(Host.toLocal8Bit().data(), NULL, &hint, &addrs);
                                if (ret == EAI_NONAME)
                                {
                                    hint.ai_flags = 0;
                                    ret           = getaddrinfo(Host.toLocal8Bit().data(), NULL, &hint, &addrs);
                                }
                                if (ret != 0)
                                {
                                    return sftp_error::resolve_error;
                                }
                             
                                found = false;
                                for (p = addrs; p != nullptr; p = p->ai_next)
                                {
                                    if (p->ai_family == AF_INET)
                                    {
                                        found = true;
                                        sin   = reinterpret_cast<sockaddr_in *>(p->ai_addr);
                                        break;
                                    }
                                }
                             
                                if (!found)
                                {
                                    return sftp_error::ip4_error;
                                }
                                // создание сокета
                                int socket_id = socket(AF_INET, SOCK_STREAM, 0);
                                if (socket_id == INVALID_SOCKET)
                                {
                                    return sftp_error::socket_error;
                                }
                                Socket local_socket(socket_id);
                             
                                sin->sin_family = AF_INET;
                                sin->sin_port   = htons(Port);
                                // коннект
                                ret = ::connect(sock, (struct sockaddr *)(sin), sizeof(struct sockaddr_in));
                                if (ret != 0)
                                {
                                    return sftp_error::connect_error;
                                }
                                // создание сессии
                                LIBSSH2_SESSION *session = libssh2_session_init();
                                if (!session)
                                {
                                    return sftp_error::session_error;
                                }
                                Session local_session(session);
                             
                                // установка баннера
                                if (libssh2_session_banner_set(session, "SSH-2.0-OpenSSH_LIBSSH2_1.9.0") != 0)
                                {
                                    return sftp_error::session_error;
                                }
                                // рукопожатие
                                if (libssh2_session_handshake(session, sock))
                                {
                                    return sftp_error::handshake_error;
                                }
                                // перевод в неблокируемый режим
                                libssh2_session_set_blocking(session, 0);
                                // получение отпечатка
                                fingerprint = libssh2_hostkey_hash(session, LIBSSH2_HOSTKEY_HASH_SHA1);
                                // авторизация
                                if (Auth->authType == auth_type::login)
                                {
                                    while ((ret = libssh2_userauth_password(session, Auth->login.toLocal8Bit().data(),
                                                                            Auth->password.toLocal8Bit().data())) ==
                                           LIBSSH2_ERROR_EAGAIN)
                                        ;
                                    if (ret)
                                    {
                                        return sftp_error::auth_error;
                                    }
                                }
                                else
                                {
                                    while ((ret = libssh2_userauth_publickey_frommemory(
                                                session, Auth->login.toLocal8Bit().data(), Auth->login.length(),
                                                Auth->public_array.data(), Auth->public_array.size(),
                                                Auth->private_array.data(), Auth->private_array.size(),
                                                Auth->password.toLocal8Bit().data())) == LIBSSH2_ERROR_EAGAIN)
                                        ;
                                    if (ret)
                                    {
                                        return sftp_error::auth_error;
                                    }
                                }
                                // инициализация ftp-сессии
                                do
                                {
                                    sftp_session = libssh2_sftp_init(session);
                                    if (!sftp_session)
                                    {
                                        if (libssh2_session_last_errno(session) == LIBSSH2_ERROR_EAGAIN)
                                            waitsocket(sock, session);
                                        else
                                        {
                                            return sftp_error::auth_error;
                                        }
                                    }
                                } while (!sftp_session);
                                // все четко и дерзко
                                sftpState = sftp_state::logged_in;
                             
                                // Сохранение локальных ресурсов в переменные класса
                                session  = std::move(local_session);
                                socket   = std::move(local_socket);
                                ssh_init = std::move(local_ssh);
                             
                                return sftp_error::no;
                            }
                             
                            void mov::qt::sftp_class::slotLogin()
                            {
                             
                                if (sftpState == sftp_state::ready && Auth->authState == auth_state : k)
                                {
                                    sftpError = slotLoginInternal();
                                }
                            }

                          Уже одно это проще в поддержке даже несмотря на то, что тебе нужно учитывать порядок объявления полей ресурсов в классе.
                          Сообщение отредактировано: OpenGL -
                            OpenGL, ну идея понятна. Благодаря беседе я у себя недочет нашел. Соответственно он и в твоем коде. Забыл про cleanup соединения. Так что еще класс лепить нужно. Но, если честно, если выбирать между советами - мне предложение Кили больше понравилось.
                              Цитата JoeUser @
                              OpenGL, ну идея понятна. Благодаря беседе я у себя недочет нашел. Соответственно он и в твоем коде. Забыл про cleanup соединения. Так что еще класс лепить нужно.

                              Во-первых, если там указатели, то можно просто воспользоваться unique_ptr/shared_ptr (так из примера OpenGL можно убрать Session и заменить на умный указатель).
                              Во-вторых, еще раз, такой класс-обертку ты напишешь один раз, а использовать его можно много где (в отличие от goto, который придется писать в каждой подобной функции) и везде твой код (самой функции) станет чище и проще.
                                Цитата JoeUser @
                                Но, если честно, если выбирать между советами - мне предложение Кили больше понравилось.

                                Да ради бога. Мне просто не нравится подобный стиль с deleter-ами, но это исключительно моё субъективное мнение, от проблем же, которые есть в твоём изначальном коде, его решение точно так же защищает.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (32) « Первая ... 19 20 [21] 22 23 ...  31 32


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