Кресты / Говнокод #25930 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
// File icontact.h
// Describes a contact in the address book
class IContact
{
public:
    virtual ~IContact();
    virtual void ... 
    ... 
    void setContact(const QString& contact);
    ...
private:
    QString m_contact;
    // ... other fields ...
};

// File icontact.cpp
void IContact::setContact(const QString &contact)
{
    m_contact = contact;
}

"Ну и че тут непонятного?" (Senior software developer, 8+ years of experience)

Запостил: salamon_style salamon_style, (Updated )

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

  • Контакт внутри которого контакт?
    Ответить
  • > class IContact
    > QString m_contact;
    > void setContact(const QString& contact);
    Ох уж эти крестовые интерфейсы с ошмётками реализации…
    Ответить
    • куиик

      а что будет m_contact? он вэмбеддица в каждый файл, который его юзает?
      Ответить
      • В смысле? Нет, он будет во всех потомках IContact. Я сетую на отсутствие в крестах нормальных «интерфейсов» — или, скорее, на подобные вот монстры, мимикрирующие под интерфейсы.
        Ответить
        • Просто это надо было назвать не интерфейсом, а абстрактным классом.
          А если в классе нет полей, а все методы абстрактные - ну, тогда он и есть интерфейс, чем он ненормален?
          Ответить
          • В языке моей мечты вообще не будет "виртуальных" методов в классах.

            Либо ты Pure interface (по сути -- контракт), либо ты закрытый для наследования.

            За наследование реализации надо бить ебало и ссать в рот чуть менее, чем всегда.
            Ответить
        • Почему же? Чем не интерфейс из тех же C# или Java?
          class IContact
          {
          public:
            virtual ~IContact() = default;
            virtual const QString& name() const = 0;
            virtual const QString& secondName() const = 0;
          };

          Не язык плох, а те, кто на нем пишут
          Ответить
          • Ну да, моя претензия действительно относится скорее к интерфейсописателям. С другой стороны, отсутствие в крестах отдельной сущности «интерфейс» или «абстрактный класс» — вопрос достаточно дискуссионный.
            Ответить
            • >абстрактный класс
              Да не нужно это, если это не pure abstract, а тогда он интерфейс (або протокол в терминах ObjC).

              Пушо наследование ВСЕГДА нужно заменять делегированием.
              Если хочется шаблонного метода -- значит параметризуй объект лямбдой с этой стратегией.

              В языке должен быть сахер для делегирования (как в котлине) а не блядское наследование.

              Самая педерастия в C# и Java, в том, шо там все открытое (а в жобе еще и виртуальное) по умолчанию.

              Долбоёб всегда может наследоваться от твоегоь класса (если ты явно это не запретил) и переопределить конктеный метод

              И сломать LSP как имнимум. А тебе потом это поддерживать.


              наследование реализации -- зло
              Ответить
          • В джаве и C# все таки тружно сделать интерфейс с полем.
            С другой стороны, абстрактный класс там можно сделать, и это, в обещм, плохо.
            Ответить
        • Тут меня вырубило как этот класс юзать. Что такое m_contact? Почему метод у IContact::setContact, а не setName, к примеру? Мне туда можно передать "Петров" или надо какую-то специально отформатированную строку / JSON запихнуть? Чем думал человек, когда писал это?
          Ответить
          • Если это действительно инторфейс, то юзать его, как в IDL написано и не иначе.
            Но вообще это имплементирующий кококласс.
            Ответить
            • Есть идея, как обойти примитивную капчу для нарегивания ботов?
              У меня надёжных только 3.

              Жухрай сокрушенно качал головой, но, увидя огорчение в глазах Павла, не раздумывая, отстегнул свой маузер: — Вот тебе мой подарок. Павел не сразу поверил, что ему дарят вещь, о которой он так давно мечтал, но Жухрай накинул на его плечо ремень: — Бери, бери! Я же знаю, что у тебя на него давно глаза горят. Только ты осторожней с ним, своих не перестреляй. Вот тебе еще три полные обоймы к нему.
              Ответить
      • >а что будет m_contact?
        ничего не будет. В том месте где ты создашь его объект -- в том месте этот m и будет.
        Это же не код.

        Вот если бы ты сделал(а) реализацию (дефикацию) функции в .h файле, то она бы успешно вкопулировалась во всех сегменты кода всех объектных файлов (при условии что это класс, а не шоблоёбло)

        А мембер-то за чем?

        Жопень в этом говнокоде в том что

        * у контакта есть контакт
        * у интерфейса (майки с I называюит интефейсы даже в CLR) есть член. Это как если бы у девки был член. Кому-то может и ок, но вообще ничего хорошего.
        Ответить
  • Синьоры порфаворы! С чего вы вообще взяли, что это интерфейс? Из-за кривой венгерки и публичного сеттера?
    Ответить
    • С «I». Если обычный класс назван как интерфейс — это ещё большее говно, ИМХО.
      Ответить
        • Ты зеленоглазый брюнет. Вредненький, злопамятный и утонченный.
          Наверняка ты стрелец.

          Я считаю, что ты один из ушедших в мир иной юзеров, который создал себе волшебное зеркало, чтобы тешить себя независимостью. Но полной обособленности тебе обрести не удалось. Мне жаль тебя.
          Ответить
          • Я уже продал свой халат и забыл названия лекарств, поэтому могу порекомендовать только лечение по методике д-ра Попова. Да-да, с огурцом.
            Ответить
    • Это как у одного чувака был ник что-то типа IHateMyselfAndWantToDie, а второй удивлялся, что за странное имя интерфейса.
      Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8