1. C++ / Говнокод #3002

    +49.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    bool ok;
    double d;
    
    QLocale c(QLocale::C);
    d = c.toDouble( "1234.56", &ok );  // ok == true, d == 1234.56

    Ссылка на bool!

    Запостил: mock, 14 Апреля 2010

    Комментарии (31) RSS

    • Что такого странного в необходимости вернуть больше одного значения?
      И указатель != ссылка.
      Ответить
    • Я дождался С++! Даже не верится!!!
      Ответить
    • автор убейся, в C/C++ это стандартнейшая практика возвращать дополнительные значения через указатели на аргументы
      Ответить
      • Правда, пиши я фреймворк, я бы сделал так:

        double d;
        if(c.parseDouble("1234.56", &d))
        {
        // success
        }
        else
        log("Oh noes!");
        Ответить
        • Исключения нужно использовать, что-бы возвращать фэйл.
          Ответить
          • в случаях, когда логика функции явно допускает неудачный исход, исключения - зло, и нужно кодом возврата или булем.

            исключения это когда на 100% уверен, что файл есть (ну должен же быть!), а его внезапно нету... для этого-то -- вместо того чтобы мудоёбиться с обработкой _редких случаев_, а чтоб тупо оставить обработку "на потом" -- и придумали исключения... но многие этого недопетривают и лепят их везде...

            а тут логика подобной функции явно подразумевает, что строка может не содержать неверное значение, и это для программы "нормально" (не исключительный случай)
            Ответить
            • s/что строка может не содержать неверное значение/что строка может не содержать верное значение
              Ответить
            • расскажи это авторам boost::lexical_cast.
              Использование исключений здесь более, чем уместно. Но так как это куте, их здесь не используют. Куте старая библиотека и они отказались от исключений в пользу переносимости.
              Ответить
              • я срал на авторов boost::lexical_cast, в С++ вообще извращена вся идея ООП, а всякие бусты - мёртвому припарки
                Ответить
                • причём тут ООП, вообще? Ну да ладно, всё с тобой понятно...
                  Ответить
                  • ага, а ещё исключения это несколько точек выхода, причём в С-дериватах кроме явы они не входят в часть контракта, неудивительно что оно постоянно валится потом.

                    хайль исключения везде где попало! больше проблем из ниччего!
                    Ответить
          • Незря в .Net сделали две версии: Parse (кидает исключение) и TryParse (возвращает буль). В моём фреймворке я сделал так же. Иногда "ошибка" -- часть логики ("ах так! тогда мы поступим иначе!"), иногда -- её нарушение ("ВНЕЗАПНО!") Нельзя так просто судить возврат булем.

            Кстати, "чтобы" пишется слитно, без дефиса.
            Ответить
            • Кстати, "незря" пишется раздельно, без дефиса:)
              Ответить
              • граммарнаци негодуе
                Ответить
              • ага, "несмотря" пишется слитно, а "не зря" - раздельно. Люблю русский язык.
                Ответить
                • Этог происходит от глубинного различия этих двух действий, активное и пассивное состояние ума, и еще tl;dr по буддизму.
                  Ответить
          • -30% к производительности от включения исключений.
            Ответить
        • Твой формат записи не позволяет сделать множественное присваивание одной строкой, т.е.
          a= b = c.toDouble("1234.56") - а передача параметра нужна отнюдь не всегда.
          Ответить
          • и как часто это множественное присваивание встречается, чтобы её вообще учитывать, лол?
            Ответить
            • тебе, говнокодеру, может и не надо, а люди пользуются, лол
              Ответить
              • хаха. множественное присваивание - свистоперделка, без которой не могут жить как раз говнокодеры.

                ВНЕЗАПНОЕ решение, да:

                double d, e;
                if(c.parseDouble("1234.56", &d))
                {
                    e = d;
                }
                Ответить
    • Все кто возвращают ссылки на бул - могут убить себя :) это пример из хелпа куте. Естественно надо поменять параметры bool QLocale::toDouble(const QString&, double&);
      Ответить
      • конвенционно везде to%TYPE_NAME% обозначает, что возвращается %TYPE_NAME%

        так что не катит твой разрыв шаблонов. надо другое имя функции выбрать
        Ответить
    • ох, неужели это с++, я не верю
      Ответить
      • да, можешь подрочить, раз такое счастье... (омазавшись...)
        Ответить
        • А я люблю обмазываться несвежим говнокодом и дрочить. Каждый день я хожу на говнокод.ру и вставляю комментарий "где здесь С++?" к любому говнокоду, который вижу. На сотню сообщений целый день уходит. Зато, когда после тяжёлого дня я прихожу домой, открываю визуал-студио, запускаю дебуггер...ммм и компелирую С++. Мне вообще кажется, что говнокоды на С++ умеют думать, у них есть свои семьи, города, чувства, не удаляйте их, лучше закомментируйте их, говорите с ними, ласкайте их.... А вчера за компьютером, мне преснился чудный сон, как будто я зашёл на говнокод.ру, и всё прератилось в С++, джава, питон, пхп, все из С++, даже небо, даже Аллах!
          Ответить

    Добавить комментарий