Goвно / Говнокод #28342 Ссылка на оригинал

0

  1. 1
Конструктор по умолчанию?

Не, не слышали.
Рефлексией итерируемся по свойствам и вызываем функцию инициализации полей ))))))))))))))

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

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

  • Это ёбаный пиздец какой-то, блядь
    Ответить
  • каой багор ))

    а что за яп?
    Ответить
      • тогда я ничего не понял, покажи код

        в говне нет конструкторов, там можно присвоить значения полям по умолчанию, либо сделать функцию, которая заполняет нужную тебе херню
        Ответить
        • type Musor struct {
              Detali []int
          }
          type Pomoika struct {
             M1 Musor
             M2 Musor
             M3 Musor
             …
             M20 Musor
          }


          Я хочу проинициализировать все Detali по умолчанию = []int{1,2,3}, как мне это сделать?
          Ответить
          • а что за ебанутая такая структура, почему там не массив мусоров?

            и кстати я напиздел, значения по умолчанию присвоить нельзя
            Ответить
            • Ну такая нужна структура. Чтобы обращаться к полям по имени. Можно, конечно, сделать массив мусоров, и обращаться к ним по enum. Но я не обязан прогибаться под Goвняные ограничения и пилить так, как я не хотел.
              Ответить
              • тогда делай конструктор явно
                type Musor interface {
                	Detail() []int
                }
                type musor struct {
                	Detali []int
                }
                
                func (m *musor) Detail() []int {
                	return m.Detali
                }
                
                func NewMusor() Musor { //<---вот твой конструктор
                	musor := new(musor)
                	musor.Detali[0] = 1
                	musor.Detali[1] = 1
                	return musor
                }
                Ответить
                • Потом питух добавит новый мусор, а в конструкторе забудет. И я получу NilPointerException. Поэтому я и написал цикл по рефлекции.
                  Ответить
                  • я только понял твой коммент наконец

                    ты бугуртишь от отсутствия коснтрукторов по умолчанию в Го, и рефлексия это единственное решение
                    Ответить
                  • У меня в Си никаких конструкторов нет. Но я могу написать т.н. функцию, которая проинцициализирует некую структуру некоторой хуйней. Нахуя для этого какие-то специальные "конструкторы"?
                    Ответить
                    • struct Pitux
                      {
                          signed char x; //Should always be 42 if used as another structure member
                      };
                      
                      struct MegaPitux
                      {
                          long long aligned_member;
                          Pitux p1;
                          Pitux p2;
                      };
                      Напиши функцию, которая проинициализирует всех питухов в мегапитухе числом 42, и в случае добавления третьего питуха в мегапитуха позже либо проинициализирует его тоже, либо сломает копуляцию.
                      Ответить
                      • Могу только кодогенератор под это написать, который сгенерит такую функцию (но мне лень).

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

                          гомоиконность нужна
                          Ответить
                        • // MegaPitux is handled by MegaPitux*** functions
                          // Check those functions when MegaPitux is being modified
                          struct MegaPitux
                          {
                              long long aligned_member;
                              Pitux p1;
                              Pitux p2;
                          };


                          close enough.
                          Ответить
                      • > Напиши функцию, которая проинициализирует всех питухов в мегапитухе числом 42, и в случае добавления третьего питуха в мегапитуха позже либо проинициализирует его тоже, либо сломает копуляцию.

                        А в крестах можно написать нечто для автоматического печатанья хуйни, если для вложенной хуйни определены методы печатанья хуйни?

                        Ну допустим есть класс для точки в декартовых координатах:
                        class point{
                             float x, y;
                          public:
                            void print_shit(ofstream f)
                            {
                              f << "x = " << x << "; y =" <<  y << "\n";
                            }
                        };


                        Я например хочу чтобы если я напишу класс с кучей точек
                        class someshit{
                             point a, b, c, d, e, f;
                          public:
                            void print_shit(ofstream f)
                            {
                              // то вот что мне тут такое написать,
                              // чтобы оно мне позвало a.print_shit(); b.print_shit(); c.print_shit(); ....
                              // и чтобы если я насру в этот класс еще каких-то там переменных типа point
                              // то чтобы оно само там дописало print_shit() для них ?
                            }
                        };

                        И чтобы если у переменных внутри класса нет метода print_shit(), то тогда пусть компиляция ломается
                        Ответить
                        • Крестоговно как обычно содержит в себе какие-то частные хуйни (типа того же вызова конструкторов для всех вложенных хуйней в хуйни), но на произвольную питушню это уже не натягивается
                          Ответить
                          • ну завези в C++25 std::is_hujna_has_method_point, положи рядом с Бесселем:)


                            Почему ты не пишешь на lisp?
                            Ответить
                          • Скриптушня (типа питухона) всякую такую хуйню хранит в рантайме, а тут можно порешать на этапе компиляции.
                            Ответить
                              • В смысле зачем ловить ошибки на этапе компиялции, когда их можно ловить на этапе работы?:))))
                                Ответить
                                • Ну кстати да. По факту вы ловите ошибки, только на этапе работы компилятора а не программы.

                                  Если пистон компилируется 0 секунд и падает в рантайме а кресты компилсяются 30 секунд и падают во время компиляции, то кажется что питон с точки зрения продуктивности оптимальнее
                                  Ответить
                                  • Выбор между "компиляция упала на машине разработчика" и "программа упала на проде" довольно очевиден, не?

                                    Кроме того, проверка в рантайме тоже занимает время
                                    Ответить
                                    • Выбор будет между "программа упала на проде" и "программист успевает скомпилировать код один раз за день"

                                      Во втором случае неочевидно, будет ли программа написана в принципе
                                      Ответить
                                      • Зависит от сферы еще

                                        Если это софт для авионики, то я предпочел бы второй вариант:)
                                        Ответить
                                • Более широкий вопрос, чего именно будет стоит хуйня которую хочет j123123 и готовы ли мы платить эту цену

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

                                    Но у j123, насколько я понимаю, горит от половинчатости решения: в С++ завезли какую-то метушню, которой можно решить несколько задач. Потом начали добавлять костыли, по костылю на каждый кейс (std::is_хуе_мое).

                                    j123 предлагает решить проблему на корню, а не ставить костыли.


                                    Но конечно это всё не бесплатно: статическеий анализ такого кода всегда будет тюринг полным и IDE будут сосать
                                    Ответить
                                    • > Но конечно это всё не бесплатно: статическеий анализ такого кода всегда будет тюринг полным и IDE будут сосать

                                      Статический анализ крестоговна и так тьюринг-полный т.к. шаблонопарашное метапрограммирование уже есть, и оно тьюринг-полное. И constexpr-ы кстати тоже тьюринг-полные
                                      Ответить
                                      • да, но шаблоны можно не раскрывать, например, в IDE. Или раскрывать частично

                                        Тут более-ли-менее четкая граница между метаговном, и говном. А в случае полной гомоиконности её же не будет
                                        Ответить
                              • Чтоб не было оверхеда и чтоб ловить ошибку на этапе компиляции, а не в рантайме (как уже было замечено)
                                Ответить
                          • он хочет в компайл тайме

                            Грубо гря так (птичий язык)
                            fun petushok(kurka:Kurka) where: checkKurka(kurka) 
                            {
                            
                            }
                            /////////
                            compileTime fun checkKurka(obj:struct): boolean {
                            // выполняется в компайл тайме
                            // вернет фолс -- не скомпилица
                            if (obj.fields.length != 4) ...
                            }
                            Ответить
                        • Detection idiom. Через requires выражение ищешь метод с именем, сверяешь сигнатуру. И вызываешь его. Или что-то еще делаешь. С С++20 появилась адекватная минимальная интроспекция.
                          Ответить
                          • Реальный пример будет? Каким образом изнутри метода класса можно пробежаться по всем переменным этого класса и проверить, есть ли у них такой-то метод, и если есть, вызвать его?
                            Ответить
                            • Detection idiom это хак (вроде как на сфинае) чтобы в компайл тайме отловить отсутствие нужного поля/метода и по этому строить логику



                              Пробежаться по всем полям, и проверить их по случайному условию вроде бы никак нельзя?
                              Ответить
                              • Вообще, у меня легкое дежавю

                                Еще десять лет назад по говнокоду бегал петух, и говорил, что дескать в С++ два разных языка (для комплайт тайма и для рантайма) и что он вынужден два раза писать одно и тоже, как сраных ПХПшник, который пишет бизнес-логику один раз на ПХП, второй раз на джаваскрипте, и потом еще в mysql тоже самое пишет, и что не плохо бы в С++ как-то унякфицировать всё

                                Слово "Гомоиконность" еще тогда не было тут зафорщено
                                Ответить
                    • Именно пожтому ваши языки - говно. Я написал в комменты зачем мне.
                      Ответить
                      • Как ни крути, а все едино: все языки сосут буй у С++. Так что прекращай валять ваньку, и пиши опять на плюсах. Там у тебя и шаблоны и конструкторы по умолчанию и стопицот способ решить задачу
                        Ответить
                          • Этим должен дебагер заниматься, а не язык

                            Я уж молчу о том, что компилятор может твои локлаьные переменные и вовсе уконтропупить
                            Ответить
                            • Какой нахуй дебагер? Если тебе надо логи вести, то ты тоже дебагером цепляешься к хуйне?
                              Ответить
                              • Если тебе надо логи вести, то ты и пиши логи. Если тебе хочется не писать это вручную, то используй генератор кода.
                                А какой язык (кроме гомоиконных типа лиспа) это решает?
                                Ответить
                                • > А какой язык (кроме гомоиконных типа лиспа) это решает?

                                  В языке D это можно было б легко решить, если там через рефлекшен можно каким-то образом получить список локальных переменных
                                  https://dlang.org/phobos/std_traits.html - но подобной хуйни я что-то не вижу. Там есть какие-то блядь isAbstractClass, isAbstractFunction, isCallable, isDelegate и прочие "isPituz", но способа получить локальные переменные, доступные в таком-то там месте какой-то функции там похоже что нет.
                                  Т.е. в D это простым способом не решается, но кое-как черезжопно это все ж можно решить, через миксины и написание парсера
                                  Ответить
                                • Так-то в целом да, чтобы всякие такие говноязычки типа C++ это решали, надо будет добавлять какое-то говно, типа "std::get_list_of_local_variables"
                                  Но сам ты такого говна написать не можешь, не влазя в кишки компилятора. А если б была гомоиконность, ты б что угодно мог нахуевертить. Поэтому я за гомоиконность
                                  Ответить
                                  • Я против. У меня в ПХП ничего этого нет и не нужно.
                                    Ответить
                                    • Зависит от того, насколько близок AST к синтаксису. Если синтаксис это скобочная хуита как в LISP-подобной хуйне, это норм. Если синтаксис это что-то сильно заебанное, то тогда AST-трансформации это неудобная хуйня т.к. неясно каким хреном какая нода какой синтаксиальной хуйне соответствует, и с такой хуйней будет неудобно работать т.к. хер разберешь, какая конструкция в какой AST высирается
                                      Ответить
  • After reading some posts on r/programming I started to ask myself why do people outside r/golang hate Go so much? It kind of discourages me to learn the language and just makes me feel like I should be learning Rust because it will be better for me in the future.
    Ответить

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

Где здесь C++, guest?!

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


    8