Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Разобраться в коде - дело десяти секунд.
Слепили строчку - получили для нее МД5-й хэш - вернули его в виде hexadecimal. Все просто, понятно, линейно.
Я пока только одно говнокодство вижу: полученная строчка - это ни разу не ГУИД, который, как известно, несколько длиннее и имеет фиксированную структуру. Да и не должны ГУИДы быть одинаковыми при одинаковых входных данных функции - они же все-таки глобально уникальные.
Впрочем, это все лирика. Ну, назвал функцию неправильно пацан, написал 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, показать, как принято в кутях использовать статические функции - и все у него будет хорошо. 🙂
А паренек-то - кинестетик. Слов не понимает.
Таких нужно учить административными методами: за string!="" - лишать премии.
А начнет возбухать - попросить его рассказать в подробностях, как именно работает его вариант проверки, и если он не понимает, что там создается временный объект - пригрозить увольнением за несоответствие. Потому как это основы.
Они насилуют гуиды!
Слепили строчку - получили для нее МД5-й хэш - вернули его в виде hexadecimal. Все просто, понятно, линейно.
Я пока только одно говнокодство вижу: полученная строчка - это ни разу не ГУИД, который, как известно, несколько длиннее и имеет фиксированную структуру. Да и не должны ГУИДы быть одинаковыми при одинаковых входных данных функции - они же все-таки глобально уникальные.
Впрочем, это все лирика. Ну, назвал функцию неправильно пацан, написал GUID вместо Hash - что ж теперь, всем смеяться полчаса?
Нет и еще раз нет. Это даже в чем-то неполиткорректно: смеяться над крестоебами. Они же, бедняши, совсем как дети-имбецилы.
1. Нахрена ostringstream?
2. нахрена объект QCryptographicHash, если у него есть статическая функция?
3. Нахрена convToHex, если QByteArray это сам умеет.
Меня на такие выводы толкает упорное использование контейнеров из STL. Кутишные контейнеры очень даже удобны и приятны в использовании, поэтому "гибриды" с std::string и прочими встречаются во всяких интерфейсных прокладках. Ну или в коде зеленых новичков в Qt. 🙂
> 1. Нахрена ostringstream?
Человек не привык использовать вкусности QString и юзает его как std::string. В общем случае, чтобы получить строку, слепленную из параметров произвольного типа, приходится пихать все в ostringstream.
Пацан, конечно, перемудрил слегка - у него кругом строки, можно было в одну тупо слить конкатенацией.
С другой стороны, его можно понять - мало ли как мысль у него шла. Может, он сначала планировал в функцию дату-время как число передавать, написал с ostringstream, а потом власть в стране переменилась и дату-время он стал передавать в виде строки.
Обычная ситуация.
2. нахрена объект QCryptographicHash, если у него есть статическая функция?
Если парень новичок в Кути, он мог и не заметить такой тонкости. Нашел пример использования класса в документации и сделал так же. Простительно и не страшно.
3. Нахрена convToHex, если QByteArray это сам умеет.
Для человека, не работавшего раньше с Кути, QByteArray практически никак не ассоциируется со строками. Он просто не знал, куда смотреть. Да даже если он и нашел описание QByteArray::toHex(), скорее всего, пожал плечами и пропустил - ему же строки нужны в результате, а не массивы байтов.
В этом смысле QCString из "старого" Qt был попроще для новичка. По крайней мере не было лишнего барьера в понимании, что это как-то относится к строкам.
Резюмируя: код, конечно, на троечку, но и не откровенное говно. Так, малость попахивает.
Пацана заставить разобраться с QByteArray и QString, показать, как принято в кутях использовать статические функции - и все у него будет хорошо. 🙂
Пытался. 🙁 Там все глухо. Я ему сегодня втолковывал, что if (string.isEmpty () ) лучше, чем if (string != "") - он так и не согласился.
Таких нужно учить административными методами: за string!="" - лишать премии.
А начнет возбухать - попросить его рассказать в подробностях, как именно работает его вариант проверки, и если он не понимает, что там создается временный объект - пригрозить увольнением за несоответствие. Потому как это основы.
бывает в сотни раз хуже