1. C# / Говнокод #19711

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    public enum Status : byte
    {
            Disabled = 0,
            Enabled
    }

    Мопед не мой, прислала боевая подруга из Канады, реальный проект за недетские деньги.
    Лаконичности була не хватило, лучше свой енум сделать, чем писать bool IsEnabled.
    KISS.

    Запостил: kerman, 28 Марта 2016

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

    • Ждем:

      enum xynta {
          TRUE,
          FALSE,
          FILE_NOT_FOUND,
          NAN,
          INFINITY, 
          NULL,
          NIL,
          UNDEFINED
      }
      Ответить
      • причем с нею надо работать через поинтер
        тогда еще можно влепить одно состояние: когда pointer == null
        Ответить
    • если энамы в шарпе статически чекаются (т.е. каждый представляют собой отдельный тип), то почему бы и нет
      Ответить
      • чем плох бул?
        Ответить
        • может у них там особая алгебра для этого Status, а мы не знаем?
          Ответить
          • а, ну да
            Status передается прямиком в сеть через raw сокеты, и потому важно чтобы он был именно октетом
            Ответить
            • ну или они, предположим, вводят хитрую операцию умножения статусов, чтобы, к примеру, получить некий общий статус из статусов отдельных компонент?
              Ответить
              • Тогда в енум нужно вносить выравнивания
                Я не помню стандарта C#, но думаю что лучше все таки *явно* указать что Disabled=0, Enabled=1, Null=2, Nil=4 итд
                Ответить
                • опять я про зелёный забыл
                  Ответить
                  • Чо за зелёный, это что, явное соглашение о хайлайте троллинга?
                    Ответить
                    • Это сарказм, kerman.
                      Ответить
                    • Да. Программысты от общения с компом перестают понимать юмор, и приходится для них следовать дзену питона в плане юмора.
                      Ответить
                      • Да тут, на говнокоде, без подсветки не поймёшь: толи человек шутку юмора шутит, толи полный бред сивой кобылы на полном серьёзе несёт.
                        Ответить
          • Не, нихуя. Самая фишка в том, что этот статус получается прямиком из була. То есть с булом товарищи теоретически знакомы, но решили запилить свой с блекджеком и шлюхами.
            Ответить
    • подруга подкинула проблем
      Ответить
    • А может у них в будущем будет еще третье состояние? Как ты предлагаешь переводить готовый код на enum?
      Ответить
      • в гугл> "рефакторинг"
        Ответить
        • Ну и. Сравни трудозатраты на рефакторинг с изначальным введением энума
          Ответить
          • Если ты пишешь в notepad.exe или mcedit то затраты большие
            Ответить
      • Какое, нахуй, состояние может быть кроме Enabled и Disabled? Если там будет AlmostEnabled или PartiallyDisabled, то это говно, а не код, и выложу сюда сразу...
        Ответить
        • Ну если ты знаешь откуда этот код и что там нужен именно бул...
          Ответить
          • ой, да ладно отмазываться
            ты ляпнул глупость просто и начал

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

              он тут у нас за местного клоуна, мы на него даже не обижаемся
              Ответить
            • Из твоего кода это не ясно. Свои доводы я привел.
              Ответить
        • enum Status
          {
            Enabled, 
            Disabled,
            Enabling,
            Disabling
          };
          Ответить
          • Как асинхронный жс-питушок, заверяю этот комментарий, ставлю подпись и печать.
            Ответить
            • (function comment() {
                var args = arguments;
                return "какой-то слишком {0}"
                    .replace(/^/, "у тебя комментарий ")
                    .replace(/{(\d+)}/g, function () { return args[arguments[1]] });
              })("синхронный")
              Ответить
          • Элементарно может быть какое-то третье состояние, наподобие как у чекбокса - "серенькое", not set. Не true или false, а NULL.
            Ответить
            • Вот это, например.
              Ответить
            • bool?
              Скажу как бывшая WPF макака: у checkbox'a IsEnabled и есть Nullable<bool>.
              Ответить
      • И опять за одно и то же другим плюса, а на меня пытается тяфкать анонимный пидарас.
        Ответить
    • Возможно, писал чувак, который уже обжигался на введении новых статусов и все такие энтити хуячит автоматом в enum. Затрат немного, читаемость теоретически лучше, задел для новых статусов есть (кто знает, какие требования возникнут у кастомера через год). Как по мне, вовсе не говно, а скорее перестраховка.
      Ответить
      • Я работал с людьми, которые очень любят делать заклады на будущее. Там где нужно xml передавать по ftp, сконвертировав его, хуячат трёхзвенку с адовыми адаптерами под msmq и чёрта лысого с настройкой через Workflow. Это ад. Нинада premature overingeneering. Нинада...
        Ответить
        • Зато я в своё время поел говна как следует, когда за два спринта пришлось переделывать уже устоявшийся, но спроектированный без как выяснилось необходимого запаса, код. Так что как и везде, нужен баланс.
          Ответить
      • YAGNI
        Ответить
    • Уже обсуждали подобное в каком-то треде.
      Я часто так делаю, ибо ненавижу функции, которые принимают на вход булевые флажки. Что лучше читается
      doSomething(true, false, false);
      // или
      doSomething(Status.Enabled, LazyInit.No, LaunchRockets.No);

      ?
      Ответить
      • лучше читается
        [self doSomethingWithEnabled:YES andLazyInit:NO andLaunchRockers:NO];

        ай-да на объективных сишечках писать?
        Ответить
        • лучше напитоне, благо он позволяет
          Ответить
          • да, там тоже можно
            doSomething(enabled=True)
            Ответить
            • В JS тоже вот такой паттерн хорошо использовать:
              .doSomething({
                  optionOne: true,
                  optionTwo: false
              });
              Ответить
              • >>({
                выглядит как говно
                ой
                я хотел сказать как JavaScript
                Ответить
              • > хорошо использовать

                Ога.
                Опечатался в имени опции - никто и не заметит.
                Ответить
                • В JS в принципе можного много где опечататься так, что никто и не заметит. Опечатку может подсветить IDE, но если уже где-то есть optionOne и opitonOne, то может и не подсветить. Но всё же лучше, чем передавать портянку параметров.
                  Ответить
                • в обжц хотя бы упадет при компиляции
                  в питоне -- в рантайме при вызове
                  а в JS упадет при тестах

                  а, я забыл
                  JS программисты rarely пишут тесты
                  Ответить
                • > Опечатался в имени опции - никто и не заметит.
                  Великая сила -- великая ответственность. В JavaScript опечатки и в общем случае сложно заметить.
                  Ответить
      • Нинада так делать. В смысле, передавать методу. Есть же всякие пропертя, которые можно так назвать. Enabled/Disabled - это же типичный state объекта и место ему в пропертях.
        Но если очень хочется, то можно так сделать:

        doSomething(enabled:true, lazyInit:false, launchRockets:false)


        А то, как в крестах, разведут 100500 булов, которые ещё криво друг в друга кастятся...
        Ответить
        • > Нинада так делать
          Ну сегодня не надо, а завтра вот понадобится. Ну и не на C# я пишу, далеко не во всех языках есть именованные параметры.
          Ответить
      • Это жавапроблемы какие-то? В сисярпе же именованные параметры есть.
        Ответить
      • doSomething(status: true, lazyInit: false, launchRockets: false)

        опоздал
        Ответить
      • Лучше читается, когда IDE нормальная, навел курсором через Ctrl и посмотрел аргументы метода.
        Ответить
        • > Лучше
          > навел курсором через Ctrl и посмотрел аргументы метода

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

          Олсо, код-ревью у тебя тоже в IDE проходят? Или Upsource себе приобрёл?
          Ответить
          • Программирование мышкой.
            Ответить
          • Прочитать код другого человека, понять конвенцию наименования и разобраться в том, что значат поименованые значения это тоже действие. На код ревью с такими проблемами не сталкивался, так что мне не понять.
            Ответить
            • >понять конвенцию наименования и разобраться в том, что значат поименованые значения
              Если это требует училий код ревью не проходит.
              Ответить
    • вообще, я где-то помнится читал, что 100500 bool много памяти потребляют, и производительность страдает. поэтому, там как решение предлагали сделать так. ну а так же байтодрочерство, ведь bool это 2 байта, а не 8 =)
      Ответить
      • Если есть необходимость в оптимизации флажков по памяти, то это далеко не лучший вариант. Гораздо оптимальнее (минимум в 8 раз, а не в 2) сделать битовый массив, где индекс - номер объекта.
        Ответить
        • ну да
          Internal members of BitArray:
          
          private int[] m_array;
          private int m_length;
          Ответить
    • Я просто оставлю это здесь (IEEE 1164):
      U uninitialized
      X forcing unknown
      0 forcing zero
      1 forcing one
      Z high impedance
      W weak unknown
      L weak zero
      H weak one
      - don't care
      Ответить
      • Хуй бы знал (U), хуй знает (X), да (1), нет (0), нихуя (Z), не знаю (W), наверное (H), врядли (L), похуй (-). Замечательная логика, не то что ваши унылые программистские булеаны...
        Ответить
        • Z — это не нихуя, а нечто среднее между хуй знает и похуй.
          Ответить
        • P.S. В общем, Z — это оторванный провод, который выражает согласие и с «да», и с «нет». Т. е. мы точно знаем, что состояние висящее, но оно может склониться и к «да», и к «нет» в зависимости от обстоятельств.
          Ответить
          • Ну да, трудно одним словом выразить все эти состояния :) Особенно отличия сильного X от слабого W и совсем никакого Z...
            Ответить
          • Ну и плюс тут смешали вполне реальную физику (X,1,0,Z,W,H,L) с неинициализированной переменной (U) и don't care для всяких сравнений (-)...
            Ответить

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