- 1
- 2
- 3
- 4
- 5
- 6
- 7
Можно ли считать говнокодом (говноAPI) правильно работающую, но незадокументированную особенность API?
Например у вьюхи есть свойство isOpen, которое может быть задано (true/false) а может быть не задано (undefined).
Первое нужно для управления видимостью в реактивном стиле, второе предполагает что разработчик будет
управлять видимостью через хендлы вьюхи. И оно так и работает - если isOpen=undefined, то этот проп просто игнорируется
при обновлении вьюхи (чтобы не допустить конфликта source truth). Но этого нет в документации, отчего неосторожное
использование булеана и значения которое может быть undefined в качестве значения isOpen, приводит к забавному
косяку - вьюха должна исчезнуть, но она не исчезает! И тут по-началу грешишь на забагованное API. Но в нем нет бага!
guest6 07.12.2021 01:18 # +1
А если это (совсем не очевидное, будем честны) поведение еще и недокументировано, то говнокод в квадрате.
Ты понял(а) значение undefined так, твой коллег этак, а автор API вообще подумал, что это бага или побочный эффект, и пофиксил это в минорном апдейте
JaneBurt 07.12.2021 21:58 # 0
Я бы в данном случае для устранения неочевидности сделала бы поле типа visibilityBehavior: 'imperative' | 'reactive'.
> Поле, начинающееся с "is", и имеющее три состояния, это, разумеется, говнокод.
А если это поле не нужно когда собрался управлять видимостью не реактивно, а через методы компонента? Смысл undefined в том что нам не во всех случах нужно данное значение. Ну или в том что данных на каком-то шаге может не существовать вообще, а выполнить какую-то логику надо.
guest6 07.12.2021 22:04 # 0
Пусть будет интерфейс Strategy и две реализации: Imperative и Reactive.
И поле "isOpen" будет в том, где оно используется.
JaneBurt 07.12.2021 22:06 # 0
Desktop 07.12.2021 22:18 # +1
guest6 07.12.2021 22:21 # +1
У меня от джавки внутри вырос довольно крупный ``AbstractFactoryBuilderProxyProviderImp l``, и он иногда говорит за меня.
Бурт правильно сказали: в TS нужен UNION, а никакой не интерфейс. просто юнион из двух реализаций.
JaneBurt 08.12.2021 23:12 # 0
Смысл интерфейса в том, что нам важно иметь возможность прокинуть определенные данные или поведение в модуль на уровне юзера. И не важно какие еще поля содержит структурка либо как вписать новый код так, чтобы не сломать старую неизменную часть. В TS interface часто используется как объект (структурка), не являющаяся инстансом user-defined класса.
bormand 07.12.2021 01:23 # +1
З.Ы. Использование недокументированной фичи, само собой, говнокод.
Kozel 07.12.2021 04:20 # +2
bormand 07.12.2021 04:21 # +1
Kozel 07.12.2021 04:54 # +1
> можно заявить
Так-то да, любую незадокументированную штуку можно удалить и никто не сможет жаловаться. Правда, мне попадался случай, что какую-то штуку сначала тихонько удаляли из документации :D
bormand 07.12.2021 10:56 # +1
К сожалению это не так. Юзеры виноватым будут считать тебя, а не того, кто это вызывал...
Так что проще задокументировать. И поддерживать вечно.
ASD_77 07.12.2021 12:16 # 0
ObeseYoung 07.12.2021 12:46 # 0
JloJle4Ka 07.12.2021 13:20 # +2
3oJIoTou_xyu 07.12.2021 14:01 # 0
bormand 07.12.2021 14:01 # 0
3oJIoTou_xyu 07.12.2021 14:01 # 0
ObeseYoung 07.12.2021 15:26 # 0
Бля, не только на экран, но и в локал сторож
ObeseYoung 07.12.2021 16:14 # 0
https://novayagazeta.ru/static/records/2f38f06b224648d0941b5ff8193d69ab.webp
JaneBurt 07.12.2021 22:04 # 0
Steve_Brown 08.12.2021 12:15 # +2
Депутат из КПРФ попался на совращении 11-летнего мальчика
Больницы достроят!
ЕР добилась финансирования на завершение строительства больниц в регионах
(именно поэтому я против "HTTPS")
Steve_Brown 08.12.2021 13:12 # 0
Почему в КПРФ предпочитают владеть зарубежной недвижимостью?
guest6 09.12.2021 00:06 # 0
bot_batbot_batbot 09.12.2021 19:06 # 0
ucnaHckuu_CTblD 09.12.2021 22:23 # 0