Куча говна / Говнокод #27860 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
Можно ли считать говнокодом (говноAPI) правильно работающую, но незадокументированную особенность API?
Например у вьюхи есть свойство isOpen, которое может быть задано (true/false) а может быть не задано (undefined). 
Первое нужно для управления видимостью в реактивном стиле, второе предполагает что разработчик будет
управлять видимостью через хендлы вьюхи. И оно так и работает - если isOpen=undefined, то этот проп просто игнорируется
при обновлении вьюхи (чтобы не допустить конфликта source truth). Но этого нет в документации, отчего неосторожное 
использование булеана и значения которое может быть undefined в качестве значения isOpen, приводит к забавному
косяку - вьюха должна исчезнуть, но она не исчезает! И тут по-началу грешишь на забагованное API. Но в нем нет бага!

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

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

  • Поле, начинающееся с "is", и имеющее три состояния, это, разумеется, говнокод.
    А если это (совсем не очевидное, будем честны) поведение еще и недокументировано, то говнокод в квадрате.

    Ты понял(а) значение undefined так, твой коллег этак, а автор API вообще подумал, что это бага или побочный эффект, и пофиксил это в минорном апдейте
    Ответить
    • В данном случае как раз автор либы и объяснил, что это ожидаемое поведение. Прост на уровне API неочевидно что отсутствующий isOpen предполагает управление видимостью через хендлы компонента, а isOpen булевский - в реактивном стиле. И в документации это не отражено.

      Я бы в данном случае для устранения неочевидности сделала бы поле типа visibilityBehavior: 'imperative' | 'reactive'.

      > Поле, начинающееся с "is", и имеющее три состояния, это, разумеется, говнокод.

      А если это поле не нужно когда собрался управлять видимостью не реактивно, а через методы компонента? Смысл undefined в том что нам не во всех случах нужно данное значение. Ну или в том что данных на каком-то шаге может не существовать вообще, а выполнить какую-то логику надо.
      Ответить
      • Если в каком-то случае не нужно какое-то значение, то его нужно вынести.

        Пусть будет интерфейс Strategy и две реализации: Imperative и Reactive.
        И поле "isOpen" будет в том, где оно используется.
        Ответить
        • Ну да, можно и tagged union-ами (и так даже правильнее, но потребует кучи рефакторинга если на каждый рендер меняется какое-то состояние - тогда вьюха будет говнокодом). Perfomance tradeoff тут ни к чему, открытие/закрытие не в реал-тайме меняется
          Ответить
          • Ага

            У меня от джавки внутри вырос довольно крупный ``AbstractFactoryBuilderProxyProviderImpl``, и он иногда говорит за меня.

            Бурт правильно сказали: в TS нужен UNION, а никакой не интерфейс. просто юнион из двух реализаций.
            Ответить
            • Вообще кажется что ООПшные Джава паттерны по большей части возникли из-за стремления к типобезопасности (банки, тырпрайз же) при скудной на выразительность системе типов (по сравнению даже с Растом).

              Смысл интерфейса в том, что нам важно иметь возможность прокинуть определенные данные или поведение в модуль на уровне юзера. И не важно какие еще поля содержит структурка либо как вписать новый код так, чтобы не сломать старую неизменную часть. В TS interface часто используется как объект (структурка), не являющаяся инстансом user-defined класса.
              Ответить
  • Поддержу guest6: запилите enum с няшными названиями вариантов и не ебите мозг.

    З.Ы. Использование недокументированной фичи, само собой, говнокод.
    Ответить
  • Не совсем поддержу guest6: теоретически можно заявить, что во всех настройках undefined - это "берём значение из такого-то источника". Но если так себя ведут только isOpen и ещё полторы настройки - это говносрань.
    Ответить
    • В любом случае это должно быть задокументировано или выпилено няхуй.
      Ответить
      • Документацию я и имел в виду под
        > можно заявить
        Так-то да, любую незадокументированную штуку можно удалить и никто не сможет жаловаться. Правда, мне попадался случай, что какую-то штуку сначала тихонько удаляли из документации 😀
        Ответить
        • > можно удалить

          К сожалению это не так. Юзеры виноватым будут считать тебя, а не того, кто это вызывал...

          Так что проще задокументировать. И поддерживать вечно.
          Ответить
    • если undefined то значение по default true/false ... а не true/false/error
      Ответить
  • Шахтерам выдают бланки заявлений об удержании из их зарплаты определенной суммы на помощь пострадавшим при взрыве в шахте "Листвяжная". Средства обещают перечислить Красному Кресту, который отчитался о сборе уже 31 млн рублей.
    Ответить
  • С uMatrix, с которым все тут бегают, удобно ли вылавливать скрипт, который срёт на экран всякими wikimedia central notice и подобное навесное говно?

    Бля, не только на экран, но и в локал сторож
    Ответить
  • Берегите детей от красных.
    Депутат из КПРФ попался на совращении 11-летнего мальчика

    Больницы достроят!
    ЕР добилась финансирования на завершение строительства больниц в регионах

    (именно поэтому я против "HTTPS")
    Ответить
    • КОММУНИСТЫ БЕГУТ НА ЗАПАД.
      Почему в КПРФ предпочитают владеть зарубежной недвижимостью?
      Ответить
    • ебальце у КПРФовца и правда пидорское. Вообще по молодым мальчикам у нас Жириновский, но и коммунисты вот не отстают, особенно конечно в осетинском отделении
      Ответить

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

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

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


    8