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

    +1000

    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
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    class set_ftp: public QObject
    {
    public:
        typedef class impl_set_ftp: QObject
        {
            QString url     ;
            QString login   ;
            QString password;
            QString siis    ;
            QString ssm     ;
            QString ssl     ;
            QString url_siis;
            QString url_ssm ;
            QString url_ssl ;
    
            friend class set_ftp;
            impl_set_ftp(QObject* p): QObject(p) {}
        } Impl;
    
        inline QString& url     () const {return impl->url     ;}
        inline QString& login   () const {return impl->login   ;}
        inline QString& password() const {return impl->password;}
        inline QString& siis    () const {return impl->siis    ;}
        inline QString& ssm     () const {return impl->ssm     ;}
        inline QString& ssl     () const {return impl->ssl     ;}
        inline QString& url_siis() const {return impl->url_siis;}
        inline QString& url_ssm () const {return impl->url_ssm ;}
        inline QString& url_ssl () const {return impl->url_ssl ;}
    
        inline void set_url     (const QString& _url     ) {impl->url      = _url     ;}
        inline void set_login   (const QString& _login   ) {impl->login    = _login   ;}
        inline void set_password(const QString& _password) {impl->password = _password;}
        inline void set_siis    (const QString& _siis    ) {impl->siis     = _siis    ;}
        inline void set_ssm     (const QString& _ssm     ) {impl->ssm      = _ssm     ;}
        inline void set_ssl     (const QString& _ssl     ) {impl->ssl      = _ssl     ;}
        inline void set_url_siis(const QString& _url_siis) {impl->url_siis = _url_siis;}
        inline void set_url_ssm (const QString& _url_ssm ) {impl->url_ssm  = _url_ssm ;}
        inline void set_url_ssl (const QString& _url_ssl ) {impl->url_ssl  = _url_ssl ;}
    
        set_ftp()          : QObject(0), impl(new Impl(this)) {}
        set_ftp(QObject* p): QObject(p), impl(new Impl(this)) {}
    private:
        Impl* impl;
    };

    Код написанный человеком, считающим себя "гуру разработки программирования", а так же "активным научным деятелем".
    Главная мысль глядя на это у меня - охренное тестовое задание с вопросом - укажите абсолютно все бредни в этом коде, но разумеется в более нормальной формулировке... а чО - неплохой тест...
    з.ы. этот же человек никогда не пишет cpp файлы все в хедерах собачит....

    Запостил: LuCiFer, 27 Января 2012

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

    • показать все, что скрытоГде тут C++?
      Ответить
    • ну человеку явно нравится много ручной работы
      может он начитался умных статеек про pimpl, и решил попробовать себя в новом деле, ну подумаешь, хрень получилась

      а может он просто дрочит на процесс, гордится собой

      кроме того, что всё тут лишнее - и ненужная инкапсуляция с геттерами/сеттерами, и impl *, возвращать неконстантную ссылку из константного метода... если без указателя, то вызывает много вопросов даже у компилятора, видать за этим и указатель! надо же бороть крестопроблемы, в самом деле!
      Ответить
    • >class impl_set_ftp
      о, а я знаю typedef!

      >class impl_set_ftp: QObject
      зачем QObject?

      >Impl* impl;
      FFFFFUUUUUU
      QScopedPointer придумали для лохов. Ъпрограммисты не используют смарт-поинтеры. Лучше пусть QObject сам заботиться об удалении impl
      Ответить
    • inline ? А в самом хедере были обьявлены макросы запрещающие перевключение кода? Потому что тут кажется взаимоисключающие параграфы.
      Ответить
    • И видимо все inline? Ну программер крут. Я понимаю Dependency Injection сейчас довольно модный тренд, но нафига его сувать туда, где он не дает никакого смысла. Кроме разве что лишних тормозов.
      Ответить
    • А еще зачем нужны set_url и прочие set_something, если url() возвращают неконстантную ссылку? Видимо, автор решил экономить на памяти, да вот только не в курсе, что Qt-контейнеры используют implicity shared
      Ответить
      • . ну вообщем цель у него такая было, а заставить его прочитать что такое implicity shared - невозможно...
        до этого он вообще все свои переменные облечал в такую ересь -
        template <class T>
        class ssm_Var
        {
        public:
        ssm_Edit edit;
        ssm_Var():edit(DEFAULT_EDIT) {}
        ssm_Var(T _var):edit(DEFAULT_EDIT), var(_var){}
        inline void set(T _var) {var = _var; } //Устанавливаем Переменную
        inline T get() const {return var;} // считываем Переменную
        inline T* link() {return &var;} // или указатель на неё
        inline T& self() {return var;} // или её же по ссылке
        private:
        T var; // Переменная, ради которой и создан весь класс
        };

        потом надоело, в проекте где это есть оставил и начал облачать уже в

        // класс с двумя переменными
        template <class T1, class T2>
        class zn_var_ab
        {
        public:
        zn_var_ab(){}
        zn_var_ab(T1 _a, T2 _b): a(_a), b(_b){}
        inline void set_a(T1 _a) {a.set(_a);}
        inline void set_b(T2 _b) {b.set(_b);}
        inline void set_ab(T1 _a, T2 _b) {a.set(_a); b.set(_b);}
        inline T1 get_a() const {return a.get();}
        inline T2 get_b() const {return b.get();}
        inline T1* link_a() {return a.link();}
        inline T2* link_b() {return b.link();}
        inline T1& self_a() {return &a.self();}
        inline T2& self_b() {return &b.self();}
        private:
        zn_var<T1> a;
        zn_var<T2> b;
        };

        template <class T>
        class zn_var_def
        {
        public:
        zn_var_def(): def(false) {}
        zn_var_def(T _var): def(true), var(_var) {}
        inline void set(T _var) {var = _var; def = true;}
        inline bool isDefined() {return def;}
        inline bool isEmpty() {return !def;}
        inline T get() const {return var;}
        inline T* link() {return &var;}
        inline T& self() {return var;}
        private:
        bool def;
        T var;
        };
        теперь перешел к описанному в самом начале....
        и все это в рамках одного проекта, все переменные в это г обвернуто...
        1.5 МБайта (!!!!!) сырцов этого ада.....
        Ответить
        • я представляю какой у него баттхёрт от того, что в С++ всё ещё нет таких нужных пропертей
          мыши кололись и плакали
          Ответить

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