Работа с выражениями
Выражения широко используются в SberMobile, поэтому важно разбираться в обработке выражений с точки зрения программирования.
Выражение представлено классом Expression
, который может быть создан из строки. Однако экземпляры Expression
инкапсулируют анализируемое синтаксическое дерево. Поэтому если единственный экземпляр Expression
вычисляется несколько раз (например, с разной средой), то разбор этого исходного текста предоставляется только раз.
Вычисление выражения, например, вычисление результатов, выполняется методами evaluate()
класса Evaluator
. Эти методы возвращают необработанные экземпляры Object
, которые представляют собой результирующие значения. Однако есть методы, включающие преобразование результирующего значения в определенный тип: evaluateToBoolean()
, evaluateToColor()
, evaluateToData()
, evaluateToDataTable()
, evaluateToDate()
, evaluateToNumber()
, evaluateToString()
и другие.
Объект Evaluator
имеет карту схем ссылок, которая используется для определения того, какая часть системы должна быть использована для разрешения ссылки. Наиболее часто используемые схемы указывают на стандартную ссылку (когда схема не указана) и ссылку на окружение, обозначаемую схемой env
.
Большинство выражений требует указания определенной схемы, поэтому класс Evaluator
имеет ряд специальных конструкторов и методов настройки, делегирующих функциональность стандартной схеме и позволяющих указать:
ContextManager
, который используется для нахождения контекстовContext
по умолчаниюDataTable
по умолчаниюCallerController
, который копирует разрешения пользователя или модуля, для которого вычисляется выражение.