Работа с выражениями

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

Выражение представлено классом Expression, который может быть создан из строки. Однако экземпляры Expression инкапсулируют анализируемое синтаксическое дерево. Поэтому если единственный экземпляр Expression вычисляется несколько раз (например, с разной средой), то разбор этого исходного текста предоставляется только раз.

Вычисление выражения, например, вычисление результатов, выполняется методами evaluate() класса Evaluator. Эти методы возвращают необработанные экземпляры Object, которые представляют собой результирующие значения. Однако есть методы, включающие преобразование результирующего значения в определенный тип: evaluateToBoolean(), evaluateToColor(), evaluateToData(), evaluateToDataTable(), evaluateToDate(), evaluateToNumber(), evaluateToString() и другие.

У объекта Evaluator есть карта распознавателей ссылок (представленных интерфейсом ReferenceResolver). Большинство распознавателей пользователей являются стандартными распознавателями (доступными посредством метода getDefaultResolver()) и распознавателями среды (доступными посредством метода getEnvironmentResolver()).

Большинство выражений запрашивает указание определенных настроек распознавателя по умолчанию, поэтому у класса Evaluator есть большое количество особых методов конструкторов и конфигураций, которые передают функциональность стандартному распознавателю и позволяют указывать:

  • ContextManager, который используется для нахождения контекстов
  • Context по умолчанию
  • DataTable по умолчанию
  • CallerController, представляющий права доступа пользователя/модуля, вычисляющего выражение