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

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
  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
#include "property.hpp"

class person {
public:
   person() = default;
   ~person() = default;

   SETTER_PRIM(int, id);
   SETTER_FLAG(bool, merried);
   SETTER_ENUM(human, type);

   SETTER_PTR(int, next);
   SETTER_ARR(std::string, address, 3);

   SETTER_OBJ_LR(std::string,  name);
   SETTER_OBJ_CLR(std::string, name);
   SETTER_OBJ_RR(std::string,  name);

   GETTER_PRIM(int, id);
   GETTER_FLAG(bool, merried);
   GETTER_ENUM(human, type);

   GETTER_OBJ_LR(std::string,  name);
   GETTER_OBJ_CLR(std::string, name);

   GETTER_PTR(int, next);
   GETTER_ARR(std::string, address);

private:
   int id;
   human type;

   std::string name;
   std::string address[5];

   bool merried;
   int* next;
};

https://habr.com/ru/post/459212/

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

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

  • Бог мой, да нахуя?!

    > int* next;
    Это, я надеюс, указатель на объект Person? да? да?

    >merried
    а, понятно
    Ответить
  • Приведите один премер зачем нужны тупые пустые геттеры и сеттеры
    Ответить
    • Брякпоинты ставить, если дебаггер тупой и не умеет останавливаться на записи в определённую область памяти.
      Ответить
      • в нативном коде такой проблемы нет
        поцы поддерживают сколько-то бряк железных, для всего остального есть муха цэцэ она же Int3
        Ответить
        • Скажите мне честно, коллега
          Вы джавист?
          Ответить
          • Сетевое взаимодействие, когда удаленное устройство отваливается по таймауту? Мышиная возня с перетаскиванием? Обработка длинных списков?
            Ответить
              • Случаи, когда использование отладчика (и даже брекпоинтов с условием и брекпоинтов на память) может оказаться бесполезным, и придется прописывать в программу qDebug() << QDateTime::currentTime() << ": Setting kokoko to " << m_kokoko << "!!!";
                Ответить
                • Приведи пример когда без геттера не отдебажить в С++

                  Кстати, Дйкстра просил передать, что кто пользутеся дебагером -- тот пидор
                  Ответить
                    • Не пиши сложный код
                      Пиши логи
                      И дебагер будет не нужен

                      Боюсь что если к тебе придет старина Дейкстра, то ты охуеешь
                      Ответить
                      • > Не пиши сложный код

                        А что мне делать с легаси, где с одной стороны поработал трёхзвёздочный сишник, с другой опытный энтерпрайзный копипастер, а с третьей устроили локальную войну поборники С-с-классами и ModernC++?
                        Ответить
                        • Во времена Дейкстры не было С++, энтерпрайза и трехзвездочных. Да и легаси не было..:)

                          на самом деле я всё прекрасно понимаю, я и сам часто не могу прорваться через дерьмо без дебагера. Но это всегда _плохой_ признак.

                          Если код нельзя понять без дебагера, значит это плохой код.
                          Однако большинство кода в этом мире -- плохое
                          Ответить
                          • Иногда хороший код написать невозможно.

                            Представь себе: производство. На этом производстве есть конь-тролер. У меня в калькуляторе скорее всего стоит более быстрый и сбольшим объёмом памяти. Но у него есть одно преимущество — если бы он стоял в Терминаторе, то погружение в расплавленную сталь ему бы ничего не сделал. Да и попытка Сары расколотить его молотком потерпела бы неудачу, даже если её бы не остановили. И это хорошо, потому что эксплуатируется он приблизительно в таких же условиях.

                            Задача этого конь-тролера — предупреждать, если расчетные параметры происходящих процессов не совпадают с реальными. Для этого он постоянно рассчитывает эти теоретические параметры на основании происходящих процессов.

                            Физическая модель этих процессов — 20 страниц математических формул.
                            А теперь представь себе расчеты физических моделей численными методами, оптимизированными конкретно под эту модель конь-тролера. И часть вычислений заменили грубыми приближёнными, потому что иначе собаку пнуть не успевали.

                            Вот как тут написать понятный код?

                            И тебе нужно понять, в чём проблема — в недостаточной точности приближённых вычислений? В реализации алгоритма? В самой модели?
                            Ответить
                            • Взять язык для математики, и написать код на нем. А еще лучше попросить сделать это математиков. А затем покрыть миллиардом тестов.

                              А ты уверен, что тут тебе поможет дебаг?
                              Ответить
                              • > язык для математики
                                Это какой? Он способен уверенно генерировать код для железок, частота которых по-моему до мегагерца не дотягивает, и у которых память килобайтами меряется?

                                Там дикое битоёбство и экономия инструкций. Черная магия после которой 0x5f3759df кажется простым и понятным. Зато есть возможность полностью сдампить внутреннее состояние. Сиди и разбирайся, что происходило.
                                Ответить
                            • > Представь себе: производство. На этом производстве есть конь-тролер. У меня в калькуляторе скорее всего стоит более быстрый и сбольшим объёмом памяти. Но у него есть одно преимущество — если бы он стоял в Терминаторе, то погружение в расплавленную сталь ему бы ничего не сделал.

                              ...
                              > Физическая модель этих процессов — 20 страниц математических формул.
                              > А теперь представь себе расчеты физических моделей численными методами, оптимизированными конкретно под эту модель конь-тролера. И часть вычислений заменили грубыми приближёнными, потому что иначе собаку пнуть не успевали.

                              А нахуя непосредственно сам контроллер со всеми этмии физическими ма-те-ма-тическими вычислениями ставить в какие-то хардкорные условия? Можно ж где-то разместить жирный контроллер, который всю ма-те-ма-тику посчитает, отправит результат по какому-то там говноинтерфейсу в тупой контроллер, который нужными ножками подрыгает по команде чтоб какое-то там говно переключить
                              Ответить
                            • > Представь себе: производство. На этом производстве есть конь-тролер. У меня в калькуляторе скорее всего стоит более быстрый и сбольшим объёмом памяти. Но у него есть одно преимущество — если бы он стоял в Терминаторе, то погружение в расплавленную сталь ему бы ничего не сделал.

                              ...
                              > Физическая модель этих процессов — 20 страниц математических формул.
                              > А теперь представь себе расчеты физических моделей численными методами, оптимизированными конкретно под эту модель конь-тролера. И часть вычислений заменили грубыми приближёнными, потому что иначе собаку пнуть не успевали.

                              А нахуя непосредственно сам контроллер со всеми этмии физическими ма-те-ма-тическими вычислениями ставить в какие-то хардкорные условия? Можно ж где-то разместить жирный контроллер, который всю ма-те-ма-тику посчитает, отправит результат по какому-то там говноинтерфейсу в тупой контроллер, который нужными ножками подрыгает по команде чтоб какое-то там говно переключить
                              Ответить
                              • У меня есть подозрение, что во время, когда это внедряли, это был жирный контроллер. А потом пошло «работает — не трожь» и «хер где мы ма-те-ма-тика для этих расчётов снова найдём».
                                Ответить
                        • Трёхзвёздочник - это который void*** использует?
                          Ответить
                            • Ну кстати для этой говняшки есть же освеживатель воздуха.


                              PPetuh это указатель на питуха. Так что PPetuh* вроде как и однозвёздочный.

                              Я вот недавно совсем две звезды видал, кажется в COMе
                              Ответить
                              • > PPetuh это указатель на питуха.

                                А может это двойной указатель на "etuh"?
                                Ответить
                                • У меня в контроллерах именование структур начинается с буквы "T". Поэтому etuha быть не может.
                                  Ответить
                        • > А что мне делать с легаси, где с одной стороны поработал трёхзвёздочный сишник, с другой опытный энтерпрайзный копипастер, а с третьей устроили локальную войну поборники С-с-классами и ModernC++?

                          Ну я могу предложить несколько вариантов, например
                          1) Переписать нахуй это говно
                          2) Заставить кого-то другого с этой хуйней пердолиться
                          3) Сменить место работы
                          Ответить
                        • > А что мне делать с легаси, где с одной стороны поработал трёхзвёздочный сишник, с другой опытный энтерпрайзный копипастер, а с третьей устроили локальную войну поборники С-с-классами и ModernC++?

                          Ну я могу предложить несколько вариантов, например
                          1) Переписать нахуй это говно
                          2) Заставить кого-то другого с этой хуйней пердолиться
                          3) Сменить место работы
                          Ответить
                          • Легаси будет везде, лолич.
                            Кроме какого-то ебучего стартапа или контроллера.
                            Ответить
                      • Сейчас придёт ж123123 и скажет, что у него в контроллерах никаких логов нет
                        Ответить
                        • Вообще говоря у него есть UART обычно, туда вполне можно срать логами.
                          А вот дебажиться ему сложнее. Разве что через JTAG.. (я так думаю, но я не сварщик)
                          Ответить
                          • > А вот дебажиться ему сложнее. Разве что через JTAG..

                            Можно и по SWD. Можно в контроллер зашить специальную хуйню, которая бы позволяла прошивку отлаживать, ну например чтобы когда по UART прилетает байтик специальный, чтобы срабатывало прерывание и там бы сохранялся полностью стейт, и чтоб можно было ставить брейкпоинты, если можно писать в область памяти с инструкциями (т.е. вместо какой-то инструкции можно хуйнуть "goto инструкцию" на некоторое говно, которое остановит нормальное выполнение программы и напишет что-то по UART что вот типа этот брейкпоинт сработал), а потом можно продолжить, заменив эту "goto инструкцию" на то, что там было, и выполнить это. Т.е. технически можно и через UART отлаживать контроллеры, если память с инструкциями переписываемая.
                            Ответить
                        • Вообще-то есть. Я логами даже по TCP протоколу срал из контроллера по wifi.
                          Ответить
                          • Если у тебя будет segfault, то нихуя у тебя не успеет отправиться в лог, если высрать туда непосредственно перед падением
                            Ответить
                            • Если у меня segfault то сработает какой-то там обработчик segfault-а, который теоретически может содержать в себе некоторое говно, которое что-то куда-то отправит по UART-у
                              Ответить
                              • У меня вот есть сегфолт, даже стектрейс есть, даже в gdb вижу переменные. Но вот высрать куда-то асинхронно логи перед падением - проблематично. Только срать в stderr или в файл
                                Ответить
                                • > Но вот высрать куда-то асинхронно логи перед падением - проблематично. Только срать в stderr или в файл

                                  Нахуя тебе какая-то асинхронность перед падением? Вот допустим у тебя процесс в линуксе словил сигнал SIGSEGV или SIGBUS, SIGFPE, SIGILL (ту хуйню, которая приводит к аварийному завершению) и там ты назначил обработчик, который насрет в какой-то там пайп или файл некоторую хуйню через системный вызов write(). В чем проблема-то?
                                  Ответить
                                  • У меня асинхронная отправка логов. Я знаю место где падает, и хочу высрать дополнительные логи с информацией о контексте. Мне приходится делать это через cerr, а не через мой стандартный логгер.
                                    Ответить
                                    • Если твой стандартный логгер - говно, это проблема твоего стандартного логгера.
                                      Ответить
                                      • Сам ты говно. Он собирает пачку логов в памяти, сжимает их gzip-ом, когда накопилось достаточное количество или по таймеру, и отправляет на другой бекенд. Посколько программа крашится, отправить он нихуя успеет. А ты бы как сделал многопоточный логгер? Ах да, у тебя к контроллерах нет никаких потоков.
                                        Ответить
                                        • > Он собирает пачку логов в памяти, сжимает их gzip-ом, когда накопилось достаточное количество или по таймеру, и отправляет на другой бекенд.

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

                                              Почему? Можно срать в один пайп асинхронно. Например, можешь нахуячить в памяти lock-free очередь, в нее напихивать адреса, в которых строка которую надо насрать в лог. Когда твоя программа простаивает, эту хуйню можно отправлять по пайпу

                                              Что у тебя там тормозить будет?
                                              Ответить
                                              • Lock-free очередь работает в соседнем треде, верно? Как же она что-то высрать успеет, если остновной тред крашнет программу?
                                                Ответить
                                                • > Lock-free очередь работает в соседнем треде, верно? Как же она что-то высрать успеет, если остновной тред крашнет программу?

                                                  Основной тред в обработчике сигнала высрет всю очередь в другой процесс через пайп, и потом уже крашнет всё
                                                  Ответить
                                                  • пиздец вы сислог изобрели)

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

                                                    можно сделать как в евент логе в винде когда срется не текст а инт -- смещение в спец файле со всеми возможными сообщениями для данной программы
                                                    Ответить
                                                    • >пиздец вы сислог изобрели)
                                                      и кричащий пузырь "уйди-уйди"
                                                      Ответить
                              • У меня в контроллерах нет никакого UART-а.
                                Ответить
                                • > У меня в контроллерах нет никакого UART-а.

                                  Какие-то у тебя странные контроллеры. GPIO хоть есть?
                                  Ответить
                                    • Пиздец, ты под электронные часы пишешь в 1979-м году?
                                      Ответить
                          • > по TCP
                            Хоть бы #include "syslog.hph" написал, а не изобрел свой собственный лисапет...

                            А потом мы удивляемся, почему всякие китайские кунштюки управляются посредством немыслимого черезжопия, а простейшего SNMPv2 не поддерживают
                            Ответить
                  • > Приведи пример когда без геттера не отдебажить в С++

                    Придумать всякое можно... Ну да ладно, и без геттера обойдусь, одним сеттером.
                    class Urmom {
                    public:
                      const int weight;
                      void setWeight(int w)
                      {
                        // *(int *)weight = w;
                        *const_cast<int *>(&weight) = w;
                      }
                    };
                    Ответить
    • 1. А хули тут делать, сделаем обычную структуру с открытыми полями, у нас тут никакого поведения не будет.
      2. Ну разве что добавим два конструктора для удобства.
      3. А, вот еще можно сделать метод, который автоматически заполняет нужный элемент в массиве address. Ну и при этом заодно меняет поле type, а то сейчас эта проверка трех местах написана.
      4. А вот хорошо бы еще сделать, чтобы при заполнении поля type проверялся бы address.
      5. ???????
      6. Ой.
      Ответить
      • и как тут поможет пачка тупых геттеров-сеттеров?
        Ответить
        • 1. Добавляем в сеттер соответствующий код.
          2. Профит.

          Конечно, можно средствами IDE найти все обращения к полю (средство "поменять и смотреть где не компилируется") и заменить на геттер-сеттер.
          В общем, дилемма - либо предусмотреть, либо не оверинженирить. Тут уж по интуиции.
          Ответить
          • А, так мы про недоязыки типа Java

            В C# такой проблемы нет: нужно публичное поле поменять на Property и перекомпилировать
            Ответить
          • JEP 359?

            да, часть очарования уйдет из джавы конечно, не нужно больше будет писать тонны бойлерплейта тупого
            Ответить
              • Нет

                Я обожаю пафосный энтерпрайз, по настоящему пафосный: с SOAP, ESB, OLAP, и BMPL.
                Я ненавижу лишь наколенное говно из сорока девяти классов DTO с миллионом полей каждый, писанных вручную
                Ответить
    • киркоров действительно какой-то запредельный пидарас даже для российской попсы

      когда упаковали навального и его навальнят, бедросыч радовался, и писал, что этот "берлинский пациент" сеет ненависть, и так ему и надо

      когда укры схватили медведчука, киркоров стал верещать, что это преследование по политическим мотивам, и оно, дескать, недопустимо
      Ответить
      • Я не хотел этого знать, просто выступал за разнообразие паюсных петухов, в котором наша сила.
        Ответить
        • >паюсных
          кстати, давно не ел паюсной черной икры
          Ответить
  • Короче, я решил окончательно стать прыщеблядью, и установить дебиан на рабочий ноут (сейчас у меня дебиан на домашнем ноуте и десктопе), и перечитываю understanding the linux kernel


    Но мне кому-то нужно отдать поддержку мастдая (винда и WSL особенно). А никто брать не хочет
    Что делать?
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8