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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
switch platform {
case "Azure":
	heartbeat = "500"
default:
	heartbeat = "100"
}

Инфраструктуру для мимосервисов чай тоже люди пишут.

https://github.com/openshift/cluster-etcd-operator/blob/release-4.5/pkg/cmd/render/env.go#L52-L81

[size=8]там еще и табы[/size]

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

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

    • в современных нормальных языках брейка уже не надо, обычно

      всё равно небрякнутые свитчи руками пишут только сишники уровня Даффа
      Типичный говнокодер для этого слишком туп
      Ответить
      • Так не надо было «switch» называть. Все уже привыкли.
        Ответить
        • ну может они с младых соплей го пишут

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

              Mandatory break это блажь, которая нужна в каком-то особо малом количестве случаев (попробуйте опровергнуть).

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

              p.s. от схемы у сишников вообще наверное коматоз наступит: case есть, а свитча нету!
              Ответить
              • Дык не надо делать fallthrough! Пусть будет ошибка конпеляции если ты бряк забудешь написать. В шарпе так и сделали, емнип.

                Ну или назови конструкцию по-другому. case вместо switch как пасцале например.
                Ответить
                • Если я не пишу на няшной или пишу 0.001% времени, а пишу на языке, где break и fallthrough обязательно ставить не надо, то мне профит.

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

                  - шарп язык хороший, но после всяких свифтов и он уже кажется архаикой
                  Ответить
                  • угу
                    Вербозности много, и нулсейфети недавно завезли только.
                    Ответить
                    • Зато аннотации.

                      И дженерики вроде более гибкие.

                      Идеала, увы, нет.

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

                        >дже
                        Да, вроде бы с обобщенным программированием у Го беда.
                        Ответить
                        • Я вообще со свифтом сравнивал, сорян.

                          В го там да, любители рекурсивно повходить в одну реку
                          Ответить
              • Ну пхп же обсирают за необычный приоритет тернарника:
                a ? b : c ? d : e
                Ответить
                  • --Дорогой, есть во мне хоть что-то хорошее?
                    --Было. Я вынул.
                    (C)

                    В пыхе можно указывать какие переменные захватит кложа. В других мейнстримовых языках (кроме С++) -- нельзя.
                    Ответить
                    • А в чём профит?

                      В Свифте можно указать, какие reftype пельменные захватывать по слабым ссылкам. И ещё можно явно указывать, что valuetype нужно скопировать. Этого недостаточно?
                      Ответить
                      • Значит, в сифте тоже к

                        Профит в том, что случайно не хватанеш лишка
                        Ответить
                • у тебя неправильный код, починил
                  $a ? $b : $c ? $d : $e;
                  Ответить
        • switch2 platform {
          case "Azure":
          	heartbeat = "500"
          default:
          	heartbeat = "100"
          }
          Ответить
      • Имхо, это хуйня и сделали её Goвнюки.

        И правильно inho пишет. Полностью поддерживаю.

        Сделайте match с паттерн-матчингом, не уродуйте оператор switch.

        Кстати Сишному комитету тоже неплохо было бы, не заниматься хуйнёй, а завезти switch 2.0 c паттерн-матчингом и возвратом значения. Как универсальную альтернативу ifу, тернарнику и свищу.
        Ответить
        • >Сделайте match с паттерн-матчингом

          Полюби котлин
          enum class Foo {
              SPAM, EGGS
          }
          
          sealed class Creature<T> {
              abstract val id: T
          
              class Dog : Creature<String>() {
                  override val id = "Bobik"
              }
          
              class Robot : Creature<Int>() {
                  override val id = 42
                  val vendor = "Robotics"
              }
          }
          
          fun call(creature: Creature<*>, foo: Foo) {
          
              when (foo) {
                  Foo.SPAM -> println("A")
                  Foo.EGGS -> println("B")
              }
          
              when (creature) {
                  is Creature.Dog -> println("Hello, ${creature.id}")
                  is Creature.Robot -> println("Robot from ${creature.vendor} is even: ${creature.id % 2 == 0}")
              }
          }
          Ответить
          • Такое дохуя где есть. И даже не такое.

            Даже в Жабу, емнип завезли.

            Но я хочу чтобы в Сишке было.
            Чтобы не было питушни с неявными булеанами, а был нормальный матчинг NULL по _
            Lal[2] ka={NULL, lal()};
            
            //null pattern match
            match(ka){
                 case {_,_} ->  ... //both is null
                 case {_,LAL} ->  ... //first is null, 2nd is lal
                 case {LAL,_} ->  ... //first is lal, 2nd is null
            }
            
            //better ternary
            int k = 3;
            int x = match (k){
                case 2 -> 7
                case 3 -> { koko(); break 42; }
                default -> 1488
            }
            Ответить
            • Да, было бы хорошо.

              В груви есть (видимо из руби) вот такая штука
              switch (val) {
                      case ~/^Switch.*Groovy$/:
                          result = 'Pattern match'
                          break
                      case BigInteger:
                          result = 'Class isInstance'
                          break
                      case 60..90:
                          result = 'Range contains'
                          break
                      case [21, 'test', 9.12]:
                          result = 'List contains'
                          break
                      case 42.056:
                          result = 'Object equals'
                          break
                      case { it instanceof Integer && it < 50 }:
                          result = 'Closure boolean'
                          break
                      default:
                          result = 'Default'
                          break
                  }


              Брейк конечно говно, но зато есть ренджи, и проверка по лямбде, и по листу.
              Ответить
              • >case 60..90
                Да. Паскаль хуйни не посоветует.

                >case 1, 3, 42:
                Да

                >case "text":
                Сравнение null-terminated указателей тоже можно было бы сделать.

                >case 42.056:
                Нет. Патаму что это плавающий питух, который априори говно. И чем вы быстрее это поймёте, тем будет лучше.

                >case { it instanceof Integer && it < 50 }:
                Невозможно. В Сишке нет инфы о типах в рантайме.
                Точнее возможно, но для этого нужно немного расширить другие части языка.
                Ответить
                • имелась ввиду лямблия. Проверить тип, ясно дело, нельзя)
                  Ответить
                  • Ля́мблии, или гиа́рдии, или жиа́рдии — род жгутиковых протистов из отряда дипломонадид.
                    Паразитируют в тонком кишечнике человека и многих других млекопитающих, а также птиц.
                    Один из видов этого рода — кишечная лямблия — возбудители лямблиоза человека.
                    Ответить
                    • Ну я про анонимную функицию же.

                      Впрочем, мне хватило бы и указателя на функцию
                      Ответить
            • Вообще, насколько я знаю, underscore это обычно для wildcard, потому null pattern тут выглядит неожиданным
              Ответить
              • Писал ночью и ошибся. Верно замечено что «_» — это не пустое (NULL), а произвольное значение.

                Хотя подчеркивание тоже говно. Т.к. может быть переменная с таким именем.

                Потому нужно вообще отстутствие чего либо:
                case [1,] //matches [1,2] [1,3] [1,4]
                case [,2] //matches [1,2] [2,2] [3,2]
                case [1,2] //matches [1,2]


                Особенно важно это для структур. Т.к. в Сишке нету поистине царского их сравнения (memcpy).

                И только компилятору ведомы паддинги. А с помощью матчинга можно будет оптимально сравнивать структуры полностью или по отдельным полям.
                struct Koko {
                   char  lalka[2];
                    int   bagor;
                };
                
                Koko k0 = ...
                Koko k1 = {.lalka="ab", .bagor=42};
                 
                match(k0){
                    case k1            -> ... //all fields equal
                    case {.lalka="ab"} -> ... //compare lalka only
                    case {.bagor=42}   -> ... //compare bagor only
                }
                Ответить
                • Совсем без символа плохо.

                  case по 5 полям:
                  case [1,,,4]


                  какое-то буэ
                  Ответить
                      • Кстати думал о звёздочках. Годный вореант.

                        >какое-то буэ
                        Можно сделать как в sparsed array.
                        case [[0] = 1, [4] = 5 ]
                        Ответить
                  • лол, вот и я проебался с примером, для пяти должно быть так:

                    case [1,,,,5]
                    Ответить
                    • Лядь, ну вы еще регулярку завезите, как в моём любимом Яuбy

                      def by_name(name)
                        case name
                        when /^[A-Z][a-z]+$/
                          'Name'
                        when /^[0-9]+$/
                          'Robot?'
                        else
                          'hm'
                        end
                      end
                      
                      puts by_name 'Joe' # Name
                      puts by_name '123' # Robot
                      Ответить
                            • Руби появился в 1995-м, но до начала 2000-х не пользовался популярностью за пределами Японии.

                              Дело, вероятно, было в том, что вся документация по нему была только на японском
                              Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8