Правила написания скриптов |
Скрипт V4A имеет синтаксис:
script <имя> [(<параметры>)] [ : <тип-результата>]; [ <описание-типов> ] [ <описание-констант> ] [ <описание-переменных> ] [ <описание-вложенных-процедур-и-функций> ] [ begin ] [ <тело-скрипта> ] end.
Описание типов, констант, переменных, вложенных методов выполняется по правилам языка
.В теле скрипта доступны блоки begin-end, var, for, while, if..else, case, exit, break, continue и стандартные операторы, доступные в языке .
Видимость типов и переменных в скрипте определяется главной логической таблицей. Значения полей соответствуют текущей записи в логической таблице.
Для описания типов, в том числе объектных интерфейсов, доступна директива компилятора #include.
При задании идентификаторов внутри скрипта допустимо использование русских букв.
В одном исходном коде допустимо описывать только один скрипт. Это ограничение создано для того, чтобы предотвратить потенциальную уязвимость, когда пользователь, вместо того, чтобы написать требуемый от него участок кода, завершит предыдущий скрипт ключевым словом end. и начнет декларацию нового скрипта.
Скрипт может вызывать методы родительского интерфейса посредством методики, продемонстрированной в примере "Вызов методов родительского интерфейса. ". Таким образом можно реализовать даже компиляцию и выполнение прочих скриптов непосредственно из другого скрипта (см. пример "Создание скрипта из скрипта. ").
Один скрипт может вызывать откомпилированный другой скрипт, как будто это обычная процедура или функция (см. пример "Вызов одного скрипта из другого. "). Механизм вызова скриптов из языка отличается от этого механизма, т.к. на момент компиляции основной программы скрипты еще не "живут" в памяти, а появляются там в процессе компиляции при исполнении основной программы.
Также в скриптах доступы специальные модификации операторов getfirst, getnext, getlast и getprev с предложением where со следующим синтаксисом:
<навигация> = <операция> <узел> where <булевское-условие>
<операция> - один из операторов навигации:
<операция> = getfirst | getnext | getlast | getprev
<узел> - переменная-ссылка на объектный интерфейс, содержащий реляционные свойства.
<булевское-условие> - дополнительное условие-фильтр.
Пример 1
script ОбязательноеСообщение; begin Message('Hello, World!'); end.
Пример 2
script Минимум(Аргумент1, Аргумент2 : longInt) : longInt; begin if Аргумент1 > Аргумент2 result := Аргумент1 else result := Аргумент2; end.
Пример 3
script УменьшиНаЕдиницу(var ЛонгинтовыйПараметр : longInt); begin ЛонгинтовыйПараметр -= 1; end.
Пример 4
script Скрипт1(var param1 : word) : word; objInterface IXFILES; property XFCODE : word read write; property XFNAME : string[20] read write index FILEBYCODE = XFCODE(unique); index FILEBYNAME = XFNAME; end; procedure abcabc; begin Message('hello, world'); end; begin var ix : ixfiles; loadVipRef(ix, ''twxfiles''); GetFirst ix whege xfcode = 10; Message(ix.xfcode); GetNext ix; result := param1; param1 := ix.xfcode; end.
Атлантис 5.4.05