Class VariableProvider
- java.lang.Object
-
- org.example.expression.function.VariableProvider
-
public class VariableProvider extends Object
Провайдер значений переменных с механизмом кэширования.Используется в StackEvaluator для получения значений переменных (x, y, z и т.д.) во время вычисления выражения. При первом обращении к неизвестной переменной запрашивает ввод через консоль и сохраняет результат в локальный кэш. Повторные обращения к той же переменной возвращают закэшированное значение без запроса ввода.
Контракт использования:
- Не является потокобезопасным
- Метод
getVariable(java.lang.String)может блокировать поток ввода-вывода
-
-
Constructor Summary
Constructors Constructor Description VariableProvider()Создаёт провайдер с вводом из стандартного потока (System.in).VariableProvider(Scanner scanner)Создаёт провайдер с кастомным источником ввода.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclearCache()Очищает кэш сохранённых переменных.doublegetVariable(String name)Возвращает значение переменной.booleanhasVariable(String name)Проверяет, было ли уже запрошено и закэшировано значение переменной.
-
-
-
Constructor Detail
-
VariableProvider
public VariableProvider(Scanner scanner)
Создаёт провайдер с кастомным источником ввода.Полезно для unit-тестирования, когда необходимо имитировать ввод пользователя без блокировки консоли (например, через
ByteArrayInputStream).- Parameters:
scanner- источник ввода значений
-
VariableProvider
public VariableProvider()
Создаёт провайдер с вводом из стандартного потока (System.in).Используется по умолчанию при вычислении выражений с переменными.
-
-
Method Detail
-
getVariable
public double getVariable(String name) throws ExpressionException
Возвращает значение переменной.Алгоритм работы:
- Проверяет наличие значения в кэше, то возвращает, если найдено
- Если нет, то выводит приглашение в консоль и ожидает ввод числа
- Парсит введённое значение, сохраняет в кэш и возвращает
- Parameters:
name- имя переменной (обычно одна буква: a, b, c, x, y, z etc)- Returns:
- числовое значение переменной
- Throws:
ExpressionException- если ввод не является валидным числом, или источник ввода закрыт/исчерпан
-
hasVariable
public boolean hasVariable(String name)
Проверяет, было ли уже запрошено и закэшировано значение переменной.Не вызывает блокирующий ввод, только проверяет внутреннее состояние кэша.
- Parameters:
name- имя переменной- Returns:
trueесли значение присутствует в кэше, иначеfalse
-
clearCache
public void clearCache()
Очищает кэш сохранённых переменных.После вызова следующего
getVariable(String)для ранее кэшированной переменной снова будет запрошен ввод с консоли.
-
-