Помощь

Расширенный набор команд тестов

Общая информация
Интерпретатор тестов поддерживает некоторое количество команд, позволяющих оперировать с результатами прохождения, запоминать их в переменных, а потом читать и использовать в нужных местах.

Набор и синтаксис команд может быть расширен со временем.

Ниже приводится список актуальных команд, их синтаксис и примеры использования.

Команды
Команды интерпретатора тестов вводятся в блоке $question - так же, как это реализовано для команды условного перехода cmd(jump), (см. предыдущюу страницу), например:
$question=cmd(sumadd)

Для каждого класса команд строго определено, должны ли за блоком $question с декларацией команды следовать команды $answer или нет.

Команды могут быть использованы только перед очередной командой cmd(jump), так как после команды cmd(jump) непосредственно выводится новый вопрос для пользователя и другие команды не обрабатываются! Явный переход, выполненный из команды cmd(jump) на любую другую команду вместо вопроса пользователю - приведет к ошибке!

Класс команд sum
Общее для всех команд этого класса ключевое слово "sum" означает, что команды работают с суммой набранных баллов. После слова "sum" обязательно должен непосредственно следовать код операции, например:
cmd(sumadd)
cmd(sumreset)

Команды sum используют внутреннюю переменную интерпретатора, в которой кэшируется некоторое число - как правило, это результат, набранный пользователем на определенном этапе, который нужно сохранить, чтобы где-нибудь позже использовать. К числу, сохраненному таким образом в кэше, затем можно прибавить или вычесть новое число, кэш можно обнулить или запросить для обработки.

Для всех команд класса sum использовать в блоке $question команды $answer недопустимо!

- Команда cmd(sumadd)
Эта команда может быть использована после любого блока $question, в котором пользователь делает выбор из вариантов ответов. Команда прибавляет полученный в этом блоке результат к числу, хранящемуся в кэше. Если кэш до этого был пуст - результат просто будет записан в кэш. Пример:

...

$question=Выберите..
$answer=Да=1000
$answer=Нет=2000

$question=cmd(sumadd)
[К числу в кэше будет прибавлено число 1000 или число 2000 - в зависимости от того, что выберет пользователь в предыдущем блоке $question]

...

- Команда cmd(sumget)
Эта команда извлекает число из кэша и прибавляет его к текущему набранному пользователем результату. Эту команду удобно использовать перед командой условной передачи управления cmd(jump), если перейти куда-либо следует не только в зависимости от текущего результата, но и в зависимости от ранее сохраненного в кэше.

Полученный сложением с кэшем результат действителен только до перехода управления к команде $question, содержащей вопрос пользователю! Результат действия команды cmd(sumget) не влияет на текущий результат при обычном переходе между вопросами теста. Пример использования этой команды:

...

[Правильное использование]

$question=Выберите..
$answer=Да=1
$answer=Нет=2

$question=cmd(sumget)

$question=cmd(jump)
$answer=1:1=yes
$answer=2:2=no
$answer=1000:2000=someElse
...

...
[Неправильное (бессмысленное :)) использование]

$question=Выберите..
$answer=Да=1
$answer=Нет=2

$question=cmd(sumget)

$question=Выберите еще..
$answer=Да=3
$answer=Нет=4

...

- Команда cmd(sumreset)
Обнуляет число, сохраненное в кэше. Например:

...

$question=cmd(sumreset)
[Кэш обнулился]

...


Допустимо использовать последовательность команд cmd(sumget) и cmd(sumreset), например:

...

$question=cmd(sumget)
$question=cmd(sumreset)
.

В этом случае число из кэша будет сначала добавлено к текущему результату, а затем кэш будет обнулен (текущий результат не изменится!).


Класс команд str
Команды этого класса работают аналогично командам класса sum, с той лишь разницей, что позволяют оперировать не с числами, а со строками. Значения, кэшируемые с помощью этих команд доступны для обработки постоянно - не требуется специальное считывание с помощью "get".

Значения, кэшируемые с помощью этих команд можно интерпретировать только в командах $answer блоков условной передачи управления $question=cmd(jump). Для того, чтобы распознать при выборе перехода наличие той или иной подстроки в кэше, следует использовать синтаксис:

$question=cmd(jump)
$answer=1:1,KeyWord=[Label]=[Weight]
$answer=KeyWord=[Label]=[Weight]


В первом случае (комбинированный диапазон) переход на Label произойдет, если на предыдущем этапе пользователь набрал 1 балл, ИЛИ в кэше содержится ключевое слово "KeyWord".
Во втором случае (простой строковый диапазон) переход на Label произойдет, только если в кэше содержится ключевое слово "KeyWord".

Важно! Рядом с запятой, отделяющей числовой диапазон от ключевого слова, в комбинированном диапазоне не должно быть пробелов! Иначе пробелы будут интерпретированы как значащие символы!

Следует учитывать, что обработка вариантов перехода происходит последовательно! Поэтому порядок размещения команд $answer может быть важен для случаев, когда один и тот же числовой диапазон используется в одном $answer с ключевым словом (комбинированный диапазон), а в другом - без него (простой числовой диапазон). Понятно, что если $answer с простым числовым диапазоном будет идти перед $answer с комбинированным дипазоном, то на второй управление никогда не будет передано! Поэтому следует, в таких случаях, делать наоборот :).

- Команда cmd(stradd)
Команда добавляет строку, являющуюся меткой соответствующего команде блока $question в кэш. Например:

...
$question=cmd(stradd)=KeyWord


В кэш будет добавлено значение "KeyWord"

- Команда cmd(strsub)
Команда удаляет строку, являющуюся меткой соответствующего команде блока $question из кэша. Например:

...
$question=cmd(strsub)=KeyWord


Из кэша будет удалено значение "KeyWord", если оно там присутствовало.

- Команда cmd(strreset)
Полностью очищает строковый кэш. Например:

...
$question=cmd(strreset)


Кэш будет очищен.

Помогла ли вам эта статья?
Предложить свою статью