Size: a a a

Чат подкаста «Разбор Полётов»

2019 October 13

ВВ

Виктор Вербицкий in Чат подкаста «Разбор Полётов»
Anton Arhipov
например , у тебя в блоке описывается набор свойств для конфигурации,  допустим какое то свойство обязательно - айди какой нибудь. Бац - забыл написать его. В рантайме узнаешь, что всё плохо. Может быть
Поведение по умолчанию? Заполняться должно не присвоением, а паремтром метода или ещё как-то? Так чтобы не мог не написать или было понятно что желать, если не написано?
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Anton Arhipov
например , у тебя в блоке описывается набор свойств для конфигурации,  допустим какое то свойство обязательно - айди какой нибудь. Бац - забыл написать его. В рантайме узнаешь, что всё плохо. Может быть
Сейчас тдля такого надо делать функцию, где этот обязательный айди будет параметром
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
И это агли, и это не позволяет чинить ошибки ретроспективно, а только при помощи эволюции апи
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
block {
  id = 123
  attr = "asdfasdf"
}


vs

block(id = 123) {
  attr = "asdfasdf"
}
источник

ВВ

Виктор Вербицкий in Чат подкаста «Разбор Полётов»
Т.е. получается что-то вроде того (могу приврать, т.к. нюансов не помню, но только чуть-чуть):

grid<BeanTypeA>("Grid Name") {
   column(BinTypeA::prop1) {
       ... column config
   }
   column(BeanTypeA::prop2) {
       ... column config
   }
   column(BeannTypeB::prop3) { « ERROR: Incorrect bean type
       ... column config
   }
}

И обрати внимание на "Grid Name" - его невозможно забыть 😉
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
так вот возможность задать что именно должно быть в блоке проинициализировано, мне кажется, дало бы очень много возможностей для удобного использования дсл-ей
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Виктор Вербицкий
Т.е. получается что-то вроде того (могу приврать, т.к. нюансов не помню, но только чуть-чуть):

grid<BeanTypeA>("Grid Name") {
   column(BinTypeA::prop1) {
       ... column config
   }
   column(BeanTypeA::prop2) {
       ... column config
   }
   column(BeannTypeB::prop3) { « ERROR: Incorrect bean type
       ... column config
   }
}

И обрати внимание на "Grid Name" - его невозможно забыть 😉
невозомно, но это требование может появиться не сразу
источник

AL

Alexander Levin in Чат подкаста «Разбор Полётов»
Anton Arhipov
block {
  id = 123
  attr = "asdfasdf"
}


vs

block(id = 123) {
  attr = "asdfasdf"
}
Не, если не бороться за строго фигурные скобки, то можно скорее так:

block(
   id = 123,
   attr = "asdasdwetf"
)

(id обязательный параметр функции, attr - нет)
Но да, так и запятые появляются.
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
например, сначала ты решил, что это имя не нужно, а через пару лет получилось так, что теперь оно обязательно
источник

ВВ

Виктор Вербицкий in Чат подкаста «Разбор Полётов»
Виктор Вербицкий
Т.е. получается что-то вроде того (могу приврать, т.к. нюансов не помню, но только чуть-чуть):

grid<BeanTypeA>("Grid Name") {
   column(BinTypeA::prop1) {
       ... column config
   }
   column(BeanTypeA::prop2) {
       ... column config
   }
   column(BeannTypeB::prop3) { « ERROR: Incorrect bean type
       ... column config
   }
}

И обрати внимание на "Grid Name" - его невозможно забыть 😉
Вот типа такого кода у нас в проде сейчас 😊
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Alexander Levin
Не, если не бороться за строго фигурные скобки, то можно скорее так:

block(
   id = 123,
   attr = "asdasdwetf"
)

(id обязательный параметр функции, attr - нет)
Но да, так и запятые появляются.
мне таки фигурные скобки милее. ты только круглыми всё равно не сможешь обойтись
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
с тем что сейчас котлин предоставляет, можно добиться очень хорошего консистентного вида, где есть только присвоения атрибутов, и блоки. но нужен механизм защиты от ошибок, когда что-то забыли написать
источник

AL

Alexander Levin in Чат подкаста «Разбор Полётов»
Anton Arhipov
мне таки фигурные скобки милее. ты только круглыми всё равно не сможешь обойтись
Не, сделать dsl исключительно на неизменяемых конструкциях вполне реально (а тогда фигурные скобки нужны будут в основном для передачи функций). Но это ограничение, это правда.
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
такие dsl-и тогда и генерировать легко, и писать, и читать
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
foo {
  bar = "baz"
  bum = quux {
      blah = Boom()
  }
}

вот типа полное подмножество такого дсл-я.
источник

ВВ

Виктор Вербицкий in Чат подкаста «Разбор Полётов»
Anton Arhipov
foo {
  bar = "baz"
  bum = quux {
      blah = Boom()
  }
}

вот типа полное подмножество такого дсл-я.
У нас таки настоящий прорыв случился именно на BeanTypeA::prop2, т.к. это же круто иметь ссылку на рефлексию без строковых констант. Да ещё и с полной проверкой корректности этой ссылки
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Виктор Вербицкий
У нас таки настоящий прорыв случился именно на BeanTypeA::prop2, т.к. это же круто иметь ссылку на рефлексию без строковых констант. Да ещё и с полной проверкой корректности этой ссылки
если это помогает предотвращать ошибки, то это шикарно
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
космосом было бы ещё если бы например была проверка range-а
когда foo(5) это ок, а foo(6) - ошибка, тк параметр foo должен попадать в интервал 1..5
источник

ВВ

Виктор Вербицкий in Чат подкаста «Разбор Полётов»
Anton Arhipov
если это помогает предотвращать ошибки, то это шикарно
Ну а как без этого? 😊
Ну просто так получается, что у нас часто надо декларативно описать работу с какими-то бинами. И если это строки - то ой. Первый же рефакторинг ломает всё к чертям. Ну и написать сразу без ошибок тоже немногие способны 😊
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
или например, делаем мы dsl для работы с датами - 24 March 2019 - круто. Но можно написать 32 March 2019. Как сделать так, чтобы функция March могла бы быть добавлена только к цифрам от 1го до 31го?
источник