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

    +152

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    QString generateGuid( const std::string &tDeviceSerial,
            const std::string &nDatetime, const std::string &licnum,
            const char *violation )
    {
        std::ostringstream s;
        s << tDeviceSerial;
        s << nDatetime;
        s << licnum;
        s << violation;
        
        QCryptographicHash hash( QCryptographicHash::Md5 );
        hash.addData( QByteArray( s.str().c_str() ) );
        QByteArray result = hash.result();
        return convToHex( (unsigned char*)result.data(), result.size() );
    }

    Оно, конечно, работает. Но разобраться в таком коде....

    Запостил: panter_dsd, 11 Мая 2011

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

    • >s << violation;
      Они насилуют гуиды!
      Ответить
    • Разобраться в коде - дело десяти секунд.
      Слепили строчку - получили для нее МД5-й хэш - вернули его в виде hexadecimal. Все просто, понятно, линейно.

      Я пока только одно говнокодство вижу: полученная строчка - это ни разу не ГУИД, который, как известно, несколько длиннее и имеет фиксированную структуру. Да и не должны ГУИДы быть одинаковыми при одинаковых входных данных функции - они же все-таки глобально уникальные.

      Впрочем, это все лирика. Ну, назвал функцию неправильно пацан, написал GUID вместо Hash - что ж теперь, всем смеяться полчаса?
      Ответить
      • >Ну, назвал функцию неправильно пацан, написал GUID вместо Hash - что ж теперь, всем смеяться полчаса?

        Нет и еще раз нет. Это даже в чем-то неполиткорректно: смеяться над крестоебами. Они же, бедняши, совсем как дети-имбецилы.
        Ответить
      • Охтыж.
        1. Нахрена ostringstream?
        2. нахрена объект QCryptographicHash, если у него есть статическая функция?
        3. Нахрена convToHex, если QByteArray это сам умеет.
        Ответить
        • Давай я сразу выскажу свое предположение: человек, написавший сей код, недавно столкнулся с Qt. Правильно? :)

          Меня на такие выводы толкает упорное использование контейнеров из STL. Кутишные контейнеры очень даже удобны и приятны в использовании, поэтому "гибриды" с std::string и прочими встречаются во всяких интерфейсных прокладках. Ну или в коде зеленых новичков в Qt. :)

          > 1. Нахрена ostringstream?

          Человек не привык использовать вкусности QString и юзает его как std::string. В общем случае, чтобы получить строку, слепленную из параметров произвольного типа, приходится пихать все в ostringstream.
          Пацан, конечно, перемудрил слегка - у него кругом строки, можно было в одну тупо слить конкатенацией.
          С другой стороны, его можно понять - мало ли как мысль у него шла. Может, он сначала планировал в функцию дату-время как число передавать, написал с ostringstream, а потом власть в стране переменилась и дату-время он стал передавать в виде строки.
          Обычная ситуация.

          2. нахрена объект QCryptographicHash, если у него есть статическая функция?

          Если парень новичок в Кути, он мог и не заметить такой тонкости. Нашел пример использования класса в документации и сделал так же. Простительно и не страшно.

          3. Нахрена convToHex, если QByteArray это сам умеет.

          Для человека, не работавшего раньше с Кути, QByteArray практически никак не ассоциируется со строками. Он просто не знал, куда смотреть. Да даже если он и нашел описание QByteArray::toHex(), скорее всего, пожал плечами и пропустил - ему же строки нужны в результате, а не массивы байтов.

          В этом смысле QCString из "старого" Qt был попроще для новичка. По крайней мере не было лишнего барьера в понимании, что это как-то относится к строкам.

          Резюмируя: код, конечно, на троечку, но и не откровенное говно. Так, малость попахивает.

          Пацана заставить разобраться с QByteArray и QString, показать, как принято в кутях использовать статические функции - и все у него будет хорошо. :)
          Ответить
          • > Пацана заставить разобраться с QByteArray и QString, показать, как принято в кутях использовать статические функции - и все у него будет хорошо.

            Пытался. :( Там все глухо. Я ему сегодня втолковывал, что if (string.isEmpty () ) лучше, чем if (string != "") - он так и не согласился.
            Ответить
            • А паренек-то - кинестетик. Слов не понимает.
              Таких нужно учить административными методами: за string!="" - лишать премии.
              А начнет возбухать - попросить его рассказать в подробностях, как именно работает его вариант проверки, и если он не понимает, что там создается временный объект - пригрозить увольнением за несоответствие. Потому как это основы.
              Ответить
    • вот это как раз вполне читаемый код
      бывает в сотни раз хуже
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить

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