Pull to refresh

Comments 8

Кроме того, проверка синтаксиса будет произведена только во время выполнения кода.
Почему же? См. $xecute:
You can use the CheckSyntax() method of the %Library.Routine class to perform syntax checking on code.
Ну правильно. А CheckSyntax когда будет вызываться? Во время выполнения кода.
Можно, конечно, на этапе компиляции проверять, но тогда можно просто код генерировать objectgenerator'ом.

Речь шла о том, что когда вы метод пишете вам Студия и синтаксис подсветит и на ошибки укажет, а с $xecute сам следи, чтоб не ошибиться, кавычки на двойные менять нужно.
Думаю, они не зря в документации написали code (у меня курсив пропал). Т.е. имелось в виду, что можно сначала проверить синтаксис code (не во время его выполнения, а перед ним!), и лишь если нет ошибок, запускать на выполнение $XECUTE(code,paramlist).
Из общих соображений: имхо, сомнительная конструкция с толком не описанной семантикой, в отличие от классической Xecute, с которой всё ясно.
Преимуществ не видно, кроме ещё одного отступления от Стандарта. Какой смысл параметров, если контекст этой «инлайн» функции не изолирован? Какой смысл в функции, если она одноразовая?
XECUTE, начиная с какой-то версии, тоже уже не классическая и может принимать аргументы так же как $xecute (http://docs.intersystems.com/cache20131/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_cxecute)

Смысл в одноразовых функциях такой же как в других неименованных константах.
Но я не обязан передавать аргументы в Xecute, если мне этого не хочется )). Не будем спорить: конечно, это дело вкуса, чем пользоваться, но классический принцип «Не следует привлекать новые сущности без крайней на то необходимости» тоже никто не отменял )). Поэтому (имхо), такие вещи как передачу параметров в Xecute и функцию $xecute — не дающие принципиально новых возможностей, а лишь в какой-то степени сбивающих с толку неофита, осваивающего и без того непривычный язык — стоит просто игнорировать.
В порядке дружеской критики — как тестировать будете?
Если бы у нас %ResultSet использовался в десяти местах, меняли бы в десяти.
«Однажды и только однажды» — не?
Еще варианты — шаблон адаптер + метод-генераторы. Например, с 2013 версии Func-метод
Как-нибудь так можно:

ClassMethod Run()
{
    
query "select 1 ID union select 2 union select 3"
    
%res ""
    
..OpenAndProcess(query,$classname(),"(p) s $LI(%res,$LL(%res)+1)=p q 0")
    
if $LISTTOSTRING(%res,",") = "1,2,3" {
        
"OK"
    
else {
        
"FAIL",!
    
}
}
ClassMethod %OpenId(id)
{
    
id
}
Sign up to leave a comment.