1. Go / Говнокод #27875

    +3

    1. 1
    2. 2
    3. 3
    if err != nil {
        return nil, err
    }

    Как же заебало

    Запостил: 3_dar, 15 Декабря 2021

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

    • приемлемо .... и так пойдет
      Ответить
    • Гошникам даже макросы не выдали?
      Ответить
      • Может лучше исключения?
        Ответить
      • Пока джавамены и растеры проектируют типы, гошники пишут код.
        Ответить
        • пока растоманы пишут код, гошники проверяют на nil и работают за конпелятор вручную проверяя все ошибки)
          Ответить
    • У гугла сколько разработчиков по порядку величины? 10к или уже 100к? При таком количестве людей макросы не нужны и вредны. А вот зачем мелкие конторы берут goвно, я представляю слабо.
      Ответить
      • Зато сколько рабочих мест для Junior Error Handler'ов и Middle Template Expander'ов!
        Ответить
        • Был в интернете какой-то анекдот про парня по имени Mac, которого якобы наняли копипастить текст, и дизайнеры для него в коде оставляли инструкции Mac read only, которые потом сократились до macro.
          Ответить
    • Программисты в какой-то момент разделились на две ветви: Программист разумный (sapiens) и програмист умелый (habilis)

      Пора первые выёбываются, вторые просто пишут код
      Ответить
      • Именно поэтому я за «PHP».
        Ответить
        • «PHP» — надёжность, производительность, эффективность.
          Ответить
        • Пока goвнюшонок пирдолится с bagor, err := kokoko PHP-бог просто пишет @.
          Ответить
      • Думаю плохие программисты разделились на пиздунов и говношлепов, потому что хорошие должны уметь и пиздеть и шлепать.
        Ответить
    • Переписал на lua
      if err ~= nil then
        return nil, err
      end
      Ответить
      • Переписал на «Nim»:
        if err <> nil:
          return (nil, err)
        Ответить
        • А что это означает? Возвращается массив или первое значение игнорируется?
          Ответить
          • Возвращается «тупл».
            Ответить
            • Тогда перевожу на «PHP»:
              if($err != null) {
                  return array(null, $err);
              }
              Ответить
              • Но там же не «тупл», там «умнл» «массив», перевод не верен.

                В «Nim», кстати, и массивы есть:

                var a = @[1, 2, 3]
                Ответить
                • А вот как просто его сделать ИММУТАБЕЛЬНЫМ (я знаю, вы это любите):

                  let a = @[1, 2, 3]
                  Ответить
                • В «PHP» нет чистых массивов. В «PHP» есть полиморфные ассоциативные «массивы», часть индексов которых может быть и числами, что создаёт видимость массива.

                  Ещё есть объекты. В семёрке можно создавать экземпляр анонимного класса:
                  return new class {
                  public $pituh = null;
                  public $kurochka = $err;
                  };



                  В семёрке появилось расширение «Ds» со структурами данных, как в серьёзных ЯП:

                  https://www.php.net/manual/ru/book.ds.php
                  Ответить
                • Кстати, чем в «Nim» туплы отличаются от массивов?
                  Ответить
                  • Я не знаю (((

                    Пишут такое про туплы:

                    Tuples are very much like what you have seen so far from objects. They are value types where the assignment operator copies each component. Unlike object types though, tuple types are structurally typed, meaning different tuple-types are equivalent if they specify fields of the same type and of the same name in the same order.

                    The constructor () can be used to construct tuples. The order of the fields in the constructor must match the order in the tuple's definition. But unlike objects, a name for the tuple type may not be used here.

                    Like the object type the notation t.field is used to access a tuple's field. Another notation that is not available for objects is t[i] to access the i'th field. Here i must be a constant integer.

                    А такое про массивы:

                    An array is a simple fixed-length container. Each element in an array has the same type. The array's index type can be any ordinal type.

                    Arrays can be constructed using []

                    Получается, что туплы круче массивов?
                    Ответить
                    • Похоже, что:

                      1. Туплами можно заменять записи (структуры), потому что элемент доступен как t.field.

                      2. Туплами можно заменять массивы, потому что элемент доступен как t[i].

                      То есть туплы — это более общий, более универсальный тип данных.
                      Ответить
                      • Как named tuple в питоне.

                        Массивы не заменить из-за иммутабельности поди? Или они мутабельные?
                        Ответить
                        • Ну что, никто не знает?
                          Ответить
                          • Можно, только что проверил. Получается, что массивы не нужны? А зачем они тогда нужны?
                            Ответить
                            • Может быть, скорость доступа к массивам больше или занимаемая память меньше?
                              Ответить
                              • Массив и тупл из двух целых чисел одинаково занимают памяти. Значит, скорость доступа к массивам больше?
                                Ответить
      • Перевёл га Си:
        if (err != NULL) {
            GLOBAL_ERROR = err;
            return NULL;
        }
        Ответить
        • > GLOBAL_ERROR = err;

          Фу как пошло. В Сишке же есть errno.

          Ждём когда goвнючки прибегут с восторженным лицом:
          — Я вам принес новую фичу, это такой thread local код ошибки, который сохраняется между вызовами.
          — Это уже было в Симпсшке. См. extern int errno;
          Ответить
          • в хуишке... бля... си ваще не знает что такое атомики а вот жабескрипту это ваще нах не надо
            Ответить
            • > си ваще не знает что такое атомики

              http://www.quickmeme.com/img/3b/3b75813af2350e14a3403e46e8539c3cb2f8d44e36b0a0ff450203ef80b42b2c.jpg
              Ответить
    • Продолжение:

      res, err = Koko()
      if err != nil {
      	return nil, err
      }
      if res.Err() != nil {
      	return nil, res.Err()
      }
      // work with res
      Ответить
      • Ехал error через error...
        Ответить
      • res на nil забыл проверить.
        Ответить
        • Не будем ему зачёт ставить, получается?
          Ответить
        • Кстати а что будет, если nil разыменовать? Exception?
          Ответить
          • terminate?
            Ответить
          • err )))))))))
            Ответить
          • Паника. А вот в Си открылась бы черная дыра.
            Ответить
            • Да от нулла в общем-то эффект обычно (но не везде) аналогичен гошной панике. В прикладнухе, по крайней мере.

              О блин, паника не смертельна, можно обработать как исключение?
              Ответить
            • Я тебе случайно поставил плюс, т.к. комментарий мне понравился, но вообще-то я хотел поставить тебе минус, т.к. ты грязный извращенец и отращиваешь себе членотитьки, а такое Я не одобряю. Учти это.
              Ответить
              • Похоже, мы нашли доктора Смегму.
                * Флудит (копипастит даже комментарии с ГК на ГК) и троллит
                * Угнетает определённые группы людей (геев, затем вореционеров, теперь женщин)
                * Пишет в нравоучительном тоне
                Ответить
                • Кста это не он у Борманда спрашивал пахнет ли его хуй говном?
                  Ответить
                  • Не помню. Впрочем, комментарии поехавших не запоминаю.
                    Ответить
                  • Это скорее всего Стертор спрашивал. Он любит такую херню писать.
                    Написанную Стертором хуйню тут принято скрывать юзерскриптами
                    Ответить
                  • А как насчет муравьев?
                    Ответить
                • > женщин
                  Ответить
              • Ты второе пришествие Бога что ли?
                Ответить
                • Это он так с тобой заигрывает наверно. Да и вообще, он завидует твоей успешности в деле MtF перехода, вот и злится https://govnokod.ru/27665#comment674348
                  Ответить
                  • Кстати интересно, почему JloJle4Ka не доебуется до bormand?
                    Ответить
                    • Я ему (ей) не нравлюсь (((

                      Слишком старая, видимо.
                      Ответить
                      • > ему (ей)
                        Ейму
                        Ответить
                      • > ему (ей)
                        Им
                        Ответить
                        • beep/bop/boop
                          Ответить
                        • В случае с пользователем джлоджлечетвёрка - ему. Это же не император, а тролль с ГК.

                          JloJle4Ka (оно/(н)его/(н)ему/(н)его/ним/нём)

                          P.S. А что, в русском языке одно и то же слово в одном и том же падеже может быть в двух разных формах, и это не только питушня вроде более-менее вариативного "в мёде/в меду", "тобой/тобою", а именно две разные формы, ни одну из которых нельзя выкинуть? Какой пипец, как этот язык вообще учат.
                          Ответить
                  • Ниче, бика и эстрожель вставят все на свои места.
                    Ответить
                    • Как хорошо, что трапы любят такое рассказывать: легко внушаемые люди этому верят, наслушавшись коварной лжи содомитов, меняют пол, а после 27 совершают суицид.

                      Потому что пиструнчика уже нет, п вот проблемы-то остались!
                      Ответить
                      • I'll be dead at twenty-seven, only nine more years to go.
                        Ответить
                        • если они все мрут быстро .. то откудава столько трапов в мире? плохая экология? или при зачатии присутствовали три мужика?
                          Ответить
                      • > а после 27 совершают суицид

                        Приготовь крафтпакет для блевотины. Некоторые пол меняют после 50, так что суицид совершают уже на пенсии.
                        Ответить
                      • >меняют пол, а после 27 совершают суицид.
                        Потому что в армию все равно не призвали.
                        Ответить
                        • Говорят, армия делает из человека мужчину. Есть ли на ГК трансгендерные личности (F2M), которые это могут подтвердить?
                          Ответить
                          • Армия делает из человека раба, тупое безвольное животное, которое по приказу пойдёт маленьких детишек накалывать на вилы.
                            Ответить
    • if (err != 0)
          return err;
      Ответить
    • err := op1()
      if err != nil {
        goto errPoint;
      }
      
      err = op2()
      if err != nil {
        goto errPoint;
      }
      
      // ...
      
      errPoint: {
        // ...
      }
      Ответить
      • Ну да, надо обрабатывать ошибки а не взять и забывать про них. А вы как хотели?
        Ответить
      • err := op1()
        if err != nil {
          goto fail; }
          goto fail;
        err = op2()
        if err != nil {
          goto fail; }
        
        // ...
        
        fail: {
          // ...
        }
        Ответить
    • Просто на го надо сразу писать без ошибок, и тогда не придется эти вырвиглазные конструкции сочинять. Логично же!
      Ответить
      • Честно говоря, да. Логично.

        Монады в Haskell, промисы в JS, исключения в python позволяют писать без ошибок, ошибки сами как-то обрабатываются.
        Ответить
      • Не более вырвиглазно чем try/catch. Вот с монадками несколько неудобно несколько типов ошибок обрабатывать в одной точке.
        Ответить
        • >Вот с монадками несколько неудобно несколько типов ошибок обрабатывать в одной точке.

          Предлагаю взять язык для белых.

          As of PHP 7.1.0, a catch block may specify multiple exceptions using the pipe (|) character. This is useful for when different exceptions from different class hierarchies are handled the same.
          Ответить
          • Потом они спрашивают, почему я за «PHP». Да вот хотя бы поэтому.
            Ответить
    • Напомню что «Rust» и «Go» стабильно входят в списки самых желанных языков.

      И в то же время не имеют нормальных механизмов педерачи ошибок по стеку без синтаксического мусора и бойлерплейта.

      Вместо них какие-то err, unwrap и паники.

      Напомню что во всех нормальных промышленных языках, абсолютно везде есть try~catch~finally

      Так же сделано автозакрытие ресурсов: try-with-resources в «Java», with в «Python», using в C# итд.

      Но есть анскильные неудачники решили как обычно пойти своим путём, но опять обосрались.

      А всё потому что не слушали мудрые напутствия Царя.
      Ответить
      • .expect("no input file") Это не говнораст. Здесь сектант обделался и начинает врать.

        Сектант понимает, что он бездарность и ничего не может, как и его недоязычок. Именно поэтому он пытается эмулировать семантику исключений и рассчитано это на то, что сторонний наблюдатель подумает “да это же исключения”, но нет. Это не исключения - это паника.

        Т.е. если я могу спокойно игнорировать и использовать исключения в С++-коде, то сектант не может сделать тоже самое. Я могу обработать исключения, если меня не устраивает “паника”. Сектанты же не может. Есть какие-то нелепые попытки ловить паники, но они не юзабельны.

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

        Если проще. Данный синтаксический мусор - это моча в рожи сектантов. Т.е. сектанты блеяли, что у них там супер-обработка ошибок и никаких проблем нет. Но как всегда обделались и никто с них за это не спросил.

        Этот синтаксический мусор - это генераций бойлерплейта вида:

        if(res.err) return res.err;


        Как видим проблемы очевидны. Синтаксический мусор + оверхед + проблемы при возврате разных типов. Если исключения можно кидать произвольного типа и строить какие угодно иерархии, то здесь нужно всё сводить к одному типу. Иначе сломается.

        Так же, этот мусор генерирует ещё множество побочного мусора вызванного нелепостью данного недоязычка для плебеев.
        Ответить
        • ты прав насчет go - как люди читают этот бойлерплейт - хз. писать то не проблема. но ты еще не проникся растовыми ошибками. по началу - да, они кажутся нелепыми, но потом доходит осознание что с ними вполне удобно жить благодаря развитой системе типов. где хочешь обработать - явно пишешь проверку аналогичную catch, где не хочешь - явно(!) ставишь ? и она летит наверх так же аналогично исключению. но читать такой код проще - видно где может выстрелить, а где нет
          Ответить
          • ну кем ты стал через 10 лет после вуза?
            на чем пишешь?
            Ответить
        • Крестоисключения тоже не идеальны. Во-первых они тяжелы. Во-вторых как мне вернуть не рантайм ошибку исключением так, чтобы клиент понял, что ее нужно ловить (никто не читает доки обычно)?

          Эту проблему хорошо решили checked исключения в яже, но к сожалению использовать их для реальных задач нельзя, потому что они довольно быстро засирают весь код.

          Я за момомомомомомнадку Either короче
          Ответить
          • throw pitux_exception(
                "Если вы это читаете, то питух-разработчик не ловит исключения. Нассыте ему на лицо за это."
            );
            Ответить
          • > тяжелы

            А вот тут тонкий момент. Если у тебя ошибки не часто (т.е. не сраный питон с его "ааа, массив кончился!", а что-то более разумное), то исключения могут и дешевле быть т.к. не засирают успешный путь бесполезными сравнениями.
            Ответить
            • А успешный путь можно подтюнить советами копилятору: вроде же есть likely, unlikely
              Ответить
              • Да, можно. Но лишние инструкции всё равно не убрать с горячего пути. А можно было бы что-то полезное исполнять вместо них.
                Ответить
          • У Either тоже есть свои косяки, к примеру иногда бывает трудно определить, откуда именно ошибка прилетела, плюс тип-параметр Left конструктора должен быть один и тот же, что для разных либ практически невыполнимо.
            Ответить
            • Всё не идеально, везде нужно писать сколько то унылого кода, но хочется чтобы компилятор помогал мне случайно не забыть обработать ошибку (иначе зачем мне компилятор? Давайте на перле писать, или на руби)
              Ответить
            • > один и тот же

              Ну можно конвертить в более высокоуровневые. В общем-то джависты и с исключениями так делают.
              Ответить
              • Ну это понятно, но нужен subtyping для этого. А он не нужен, т.к. получится скала.
                Ответить
                • Можно хвостики строкой хранить, один фиг матчат все по "главной" ошибке, а её причины просто для трейса валяются...
                  Ответить
    • Don't write internal cli tools in python
      I'll keep this one short and sweet.

      Nobody knows how to correctly install and package Python apps. If you write an internal tool in Python, it either needs to be totally portable or just write it in Go or Rust. Save yourself a lot of heartache as people struggle to install the right thing.
      Ответить

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