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

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    func getTransport(tt string) (iTransport, error) {
    	if tt == "scooter" {
    		return newElectricScooter(), nil
    	}
    	if tt == "quadcopter" {
    		return newQuadcopter(), nil
    	}
    	return nil, fmt.Errorf("Wrong type")
    }

    https://habr.com/ru/post/556512/
    > Factory Method Pattern
    > Привет, друзья. С вами Alex Versus.
    > Ранее мы говорили про шаблоны проектирования Одиночка и Стратегия, про тонкости реализации на языке Golang.
    > Сегодня расскажу про Фабричный метод.

    Запостил: PolinaAksenova, 10 Мая 2021

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

    • В сегод-няш-ней рубрике передачи "Всё для дома": удобные и полезные функции (≧◡≦)!
      Ответить
      • ОчУмелые ручки: абстрактная фабрика из пластиковых бутылок
        Ответить
    • Я очень хочу статью про фабричный метод на «С++», потому что никак не могу его написать (((

      Вот про «Golang» статья есть, про «Java» тоже есть, а про фабричный метод на «С++» статьи нет... Видимо, так я и не узнаю как же такое написать на крестах. У вас есть знакомые редакторы или авторы на Хабре, которые знают «С++»? Можете попросить их написать такую статью?
      Ответить
      • Кстати, гэнг оф фор дает примеры на плюсах
        Ответить
    • Еще раз убеждаюсь, что Go это диалект PHP.

      https://www.udemy.com/user/sergei-1146/
      >Professional full-stack developer of IT and web products. I develop in PHP,
      а, ну как я и подумал
      ---------------
      https://habr.com/ru/post/553298/

      Он еще учит писать крутые тесты
      s.SetTitle("First value")
         checkTitle := s.GetTitle()
      
         if checkTitle != "First value" {
            t.Errorf("First value is not setted") //и малость английский язык
         }
      Ответить
      • Кстати да. «PHP» был создан, чтобы даже круглый ДУРАК мог сделать себе хомяка. «Go» был создан, чтобы даже самый провинциальный ИНДУС мог писать какие-то сервисы для «Google».
        Ответить
        • Забавно, что вот ты откырваешь вики про го, и тебя сразу же встречает пиздеж

          >static typing
          в языке без генериков

          >and run-time efficiency (like C)
          в языке с GC

          >readability and usability (like Python or JavaScript),
          ридабили как в JS это такой тонкий троллинг


          Пиздеть вообще очень важно когда ты пишешь на хуевом языке.

          Например, во второй ссылке можно встретить такой диалог:

          --А в Go еще не завезли нормальных контейнеров зависимостей?
          --Контейнеры в го особо и не нужны

          кликаем на автора второго комментария, и узнаем, что он написал статью
          "Методы организации DI и жизненного цикла приложения в GO"

          --А что, круглого колеса у вас не изоберли?
          --Круглое колесо не особо нужно, обычно хватает квадратного (пишет статью "как скруглить квадратное колесо")

          Фу
          Ответить
          • > ридабили как в JS это такой тонкий троллинг
            Python в проектах крупнее пары сотен строчек — тоже, в общем-то, далеко ня образец читаемости.
            Ответить
            • но ему далеко до
              var Note = Backbone.Model.extend({
              
                initialize: function() { ... },
              
                author: function() { ... },
              
                coordinates: function() { ... },
              
                allowedToEdit: function(account) {
                  return true;
                }
              
              });
              
              var Library = Backbone.Model.extend({
                constructor: function() {
                  this.books = new Books();
                  Backbone.Model.apply(this, arguments);
                },
                parse: function(data, options) {
                  this.books.reset(data.books);
                  return data.library;
                }
              });

              https://backbonejs.org/#Model-extend

              впрочем, в 2021 уже так не надо делать
              Ответить
          • > >static typing
            > в языке без генериков

            Где противоречие?
            Статическая типизация весьма больна без полиморфизма, но у гугла есть 10k или сколько там инженеров, можно одного посадить писать имплементацию алгоритма для строк, другого — для интов, третьего — для флотов, и т.д. GAGNI (Google Ain't Gonna Need It)
            Ответить
    • "У каждого языка и его комьюнити есть свое понимание какие инструменты использовать. В Go распространен подход к выполнению большенства рутинных задач явно, уменьшая сложность понимания кода."
      https://habr.com/ru/company/vivid_money/blog/531822/#comment_22399930


      Какой чудесный эвфемизм для мартышкиного труда.

      -- Зачем ты в каждом проекте с ноля делаешь то, для чего уже 20 лет существует библиотека?

      -- Я предпочитаю всё делать явно уменьшая сложность кода.

      Философия PHP
      Ответить
    • кто не писал на java или с# те не умеют программировать
      Ответить
      • Что не умеют программировать?
        Ответить
      • Я не умею программировать
        Ответить
      • Кто в детстве не писал абстрактных фабрик стратегий -- у того нет сердца
        Кто в зрелом возрасте и полюбил свободные функции у того нет мозга

        но если без шуток, то ООП в джаве и сишрап конечно на голову лучше чем ооп в пхп и таком вот го

        Это не потому, что ооп это хорошо

        Это потому, что ооп лучше говна.
        Ответить
        • ООП это хорошо вообще-то.
          Ответить
          • Не всегда.

            Вот гуй это хорошо? А DI хорошо? А JSON?
            Ответить
            • Гуй – это хорошо, можно тыкать кнопку и смотреть картинку. Про DI я не знаю, возможно тоже хорошо. А JSON это тоже хорошо, можно отправить файл в base64 или какой-нибудь текст.

              А что?
              Ответить
              • >Гуй – это хорошо, можно тыкать кнопку и смотреть картинку.
                то есть ты бы хотел, чтобы у компилятора вместо command line api был бы гуй?

                >А JSON это тоже хорошо
                хотел бы ты данные между гарнтитурой и usb контроллером передавать jsonом?
                Ответить
                • > то есть ты бы хотел, чтобы у компилятора вместо command line api был бы гуй

                  Если оно будет написано с использованием ООП, то сойдёт и так и этак.

                  Но вообще-то я не говорил, что command line API – это плохо, это вообще-то тоже хорошо.

                  > хотел бы ты данные между гарнтитурой и usb контроллером передавать jsonом?

                  А что там читать? Байты какие-нибудь? Читать байты не нужно, значит не хотел бы.
                  Ответить
    • > (iTransport, error)
      > nil, error
      > result, nil

      Either или variant тоже оказались нинужными?
      Ответить
      • Это туплы из питона, своё не смогли придумать, вот и накопипастили оттуда!
        Ответить
        • Этот паттерн про result, error -- это lua скорее. В питоне исключения есть.
          Ответить
          • Да, ты прав. В «Go» даже не осилили туплы скопировать из питона, лол!
            Ответить
          • Попытка симулировать Result из Раста.
            Ответить
            • Пиздец, дожили. Хаскельный `Either' теперь из `Раста'.
              Ответить
              • Хочешь, поспорю, что вовсе не Хаскель стоял перед глазами у написавшего это?
                Ответить
                • в хаскеле небось изер нужно запатеррнматчить, не?

                  а тут , как я поня, нихуя не проверяют, а тупо возвращают два значения?
                  Ответить
                  • Да и в Расте нужно. Поэтому "пытались".

                    Скорее всего дальше будут смотреть, где nil и решать исходя из того. Вангую, что на nil будут проверять значение, а не ошибку, и когда-нибудь это эпично навернётся, когда окажется, что nil — валидное значение.
                    Ответить
                    • да, мы тут обсуждаем теоретический багор
                      https://govnokod.ru/27411#comment626567
                      Ответить
                    • > на nil будут проверять значение, а не ошибку

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

                    Нят, монада за тебя это сделает.
                    Ответить
                    • ну тоесть в го делают руками то, что хаскель делает автоматически уже много-много лет?

                      охуеть прогресс
                      Ответить
                      • Гагни же. С 10k инженеров, и длинной очередью желающих сесть на их места, можно и руками это делать, главное чтобы винтики заменяемыми были.
                        Ответить
                        • "В Go распространен подход к выполнению большенства рутинных задач явно" (c)
                          Ответить
                          • Надо же рабочие места создавать.
                            Ответить
                            • Я так понимаю, в гоогле много монотонной тупой обезьяней работы по написанию glue code, которую 20 лет назад делали бы на Perl/sed/awk, а теперь решили делать на go, чтобы иметь какую-то стат типизацию, форматирование, и стат линковку (чтобы везде работало)?
                              Ответить
                  • Не, там сахарок монады сам всё заматчит, для тебя это почти как исключение -- кинул и забыл. Но можно заматчить и обработать при желании.
                    Ответить
      • какой багор ))
        вот пример из туторила
        https://golang.org/doc/tutorial/handle-errors

        // Hello returns a greeting for the named person.
        func Hello(name string) (string, error) {
            // If no name was given, return an error with a message.
            if name == "" {
                return "", errors.New("empty name")
            }
        
            // If a name was received, return a value that embeds the name
            // in a greeting message.
            message := fmt.Sprintf("Hi, %v. Welcome!", name)
            return message, nil
        }

        что будет, если пустая строка это валидный вариант, и вызывающая сторона забудет проверить error?

        (про отсутствтие строковой интерполяции гыгыкать не буду)
        Ответить
        • > вызывающая сторона забудет проверить error

          А ты не забывай! Деды на сишке вон сколько лет писали и не забывали.
          Ответить
          • ну так сишка же это плохо, именно потому отказались от нее в пользу го


            языки проходят все стадии развития, как и эмбрионы

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

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