Сравниваем собственное арифметическое, логическое и строковое выражения с прямыми вычислениями. Внешний ввод никогда не превращается в исполняемый текст.
Где и как запускать
Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.
Подготовка
Используйте отдельную учебную базу без рабочих данных. Создайте серверный общий модуль УчебныйЯзык с флагом Сервер, без Привилегированный.
Вставьте весь модуль выбранного примера, а не одну процедуру внутрь другой. Из своей серверной команды учебной обработки вызовите УчебныйЯзык.ВыполнитьПример().
Все числа, строки и коллекции созданы в самом примере. Документы, регистры, файловая система и сеть не используются; никаких зависимостей от КА2/УНФ/УТ/БП нет.
Браузер показывает код, но не исполняет BSL. Проверки результата нужно выполнить вручную на платформе 8.5.1.1343 в учебной базе.
Процедура ВыполнитьПример() Экспорт
Числовое = Вычислить("250 * 3");
Логическое = Вычислить("750 <= 1000 И 3 > 0");
Текстовое = Вычислить("""Книга"" + "": "" + ""3""");
Сообщить(ТипЗнч(Числовое) = Тип("Число"));
Сообщить(ТипЗнч(Логическое) = Тип("Булево"));
Сообщить(ТипЗнч(Текстовое) = Тип("Строка"));
Сообщить(Числовое = 250 * 3);
Сообщить(Логическое = (750 <= 1000 И 3 > 0));
Сообщить(Текстовое = "Книга: 3");
Сообщить(Текстовое);
КонецПроцедурыРазбор по шагам
Каждый аргумент Вычислить — фиксированный литерал в собственном модуле. Никаких имён неизвестных объектов или строк из формы нет.
Арифметическое выражение возвращает число 750. Логическое возвращает Булево Истина, не текст Истина.
Во внешней строке двойные кавычки удваиваются. Внутри выражения остаются три строковых литерала для конкатенации.
Полученные значения проверить по типу и отдельно сравнить с прямым вычислением того же смысла.
Для обычного расчёта используйте прямой код. Здесь изучается вычисление выражения, в отличие от исполнения последовательности операторов через Выполнить.
Как проверить результат
Шесть Истина, затем Книга: 3.
Замените 250 * 3 на 250 * 5: число станет 1250 и сравнение с исходным прямым произведением даст Ложь. Тип Число сохранится.
Ожидаемый результат
Разные возвращаемые типы динамического выражения разобраны без пользовательского кода и сопоставлены с обычным синтаксисом.
На что обратить внимание
Вычислить не является безопасной песочницей. Нельзя передавать туда произвольный текст пользователя, файла или HTTP-ответа.
Возвращается значение выражения, а не заранее фиксированный тип. Проверяйте тип до использования в дальнейших операциях.
Для этого урока используйте сервер учебной базы. Через COM-соединение метод не поддерживается; на мобильной iOS тоже.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.