====== Expression ====== При анализе текста схемы процесса (см. [[..:schema:|Schema]]) выявляются её параметры, прежде всего //константы скоростей элементрарных реакций//. В кинетических расчётах они не такие уж и константы: как минимум, они зависят от температуры, а температура среды может изменяться (см. раздел [[Thermochemistry]]). Итак, значением переметра может быть выражение, //Expression//. В //ABCKinetics// в качестве выражения допустимы математические выражения, включающие арифметические операции (+ - * / ^), стандартные функции (показательная, логарифм, тригонометрические и т.д.), а также ссылки на значения других параметров и на значения концентраций реагентов процесса. Более того, пользователь для своего удобства может объявлять [[.:UDF|собственные функции]]. Подчеркну ещё раз: выражения -- это возможные значения параметров, не сами параметры((программисты такие объекты называют //RValues (right side values)//, то, что можно использовать в правой части оператора присваивания)). class Expression { public: Expression(const Expression&) = delete; Expression operator=(const Expression&) = delete; Expression(); Expression(double); Expression(const String&); ~Expression(); double evaluate(const CalcContext*) const; // for readers' info: private: const ParsedExpression* pexpr; }; Для оптимизации вычислений, выражения предварительно компилируются. Если это константное выражение (напр., //π/2// или //sqrt(2)//), то результатом компиляции будет обыкновенное число. Этот результат хранится в приватной части объектов //Expression//, в члене класса с типом //ParsedExpression//, с помощью которого и отрабатывает публичный метод //evaluate//. В общем случае выражения содержат ссылки на значения параметров и на текущие концентрации реагентов. Поэтому для вычисления выражения методу //evaluate// нужно сообщить контекст (для какого варианта/инстанса схемы проводить расчёт, то есть где взять конкретные значения параметров и концентраций). Это объект типа //[[CalcContext]]//.