HowTo sobre Fórmulas y Variables
Variables y Parámetros
En ocasiones es conveniente que una variable de un componente tome el valor directamente de un parámetro, por ejemplo, porque el se quiere presentar el mismo en el modelo multidimensional (cubo).
Efectivamente se puede poner una variable con el mismo nombre que un parametro o dependencia de componente. La estrategia de resolución que se utiliza cuando los nombres son iguales, se describe a continuación.
En primer lugar, en el contexto de evaluación de expresiones se cuenta con los siguientes nombres:
- Nombres de variables agregadas por la simulación:
- sceneId: Es el escenario corriente.
- time: Es la fecha en la cual se esta calculando.
- year: Es un sinónimo de la expresión Año(time). Su alteración no cambia el tiempo de simulación (time).
- month: Es un sinónimo de la expresión Mes(time). Su alteración no cambia el tiempo de simulación (time).
- day: Es un sinónimo de la expresión Día(time). Su alteración no cambia el tiempo de simulación (time).
- Nombres de variables introducidas por el componente, de las cuáles podemos distinguir 2 tipos a los efectos de la presente explicación:
- Elementos: se refiere a los nombres de los atributos de los elementos.
- Nombres de variables del componente.
- Nombres de variables introducidas por dependencias de componentes.
- Nombres de parámetros locales y globales.
Considerando lo anterior, en la evaluación de una expresión cualquiera el orden de resolución de los nombres, es el siguiente:
- Se busca el nombre como variable definida en la expresión. Ej: x=10.
- Se considera cualquiera de las variables introducidas por el simulador que se comentaron anteriormente (sceneId, time, ....), los elementos y las variables introducidas por el componente (éstas deben tener nombres distintos).
- Se trata de resolver la variable como nombre de parámetro o variable introducida por dependencia de componente (éstas deben tener nombres distintos).
- Si no se encuentra valor para el nombre en estas condiciones se obtiene NULO.
Notas:
- El orden en el que se declaran las variables en el componente es relevante en el sentido de que se calculan en precisamente ese orden.
- Cualquiera de los nombres si contiene espacio debe ser utilizado con la funcion correspondiente (Parametro o Variable).
La funcion parametro obtiene el valor del parametro con el nombre indicado. Tomar en cuenta que el nombre es un string. La funcion parametro ademas tiene la capacidad de sobreescribir el contexto con el que se busca el parametro, esta sobre-escritura es exclusivamente para la invocación.
La funcion variable obtiene el valor de la variable con el nombre indicado. Como antes el nombre es un string.
Como se menciono en O3SIMDEV-287 las variables introducidas por dependencia de componente deben manejarse como si fueran parametros (usar funcion Parametro).
-------------------------------------------------------------------------------------------------
Superposiciones de nombre no validas:
En los siguientes casos se especifican situaciones no validas, en general se comenta que puede pasar si el caso se da, pero dado que no es la idea que pase en un futuro esto puede dar otro resultado.
- No tiene sentido que las variables introducidas por los elementos choquen con las introducidas por las variables del componente (en el caso ganaran los elementos).
- No tiene sentido que los elementos o las variables sobreescriban las definidas por el simulador, por ejemplo declarar una variable month es un error (en el caso gana la variable declarada).
- No tiene sentido declarar 2 parametros con el mismo nombre (ganaria el primero definido). Tampoco es valido redefinir un parametro localmente para que sobreescriba el global (ganaria la local).
- No tiene sentido definir dos variables obtenidas por dependencia de componente con el mismo nombre (ganaria la primera).
- No tiene sentido declarar parametros y variables de componentes con el mismo nombre (si llegara a pasar ganaria el parametro).
Nota: Los datos obtenidos por dependencia de componentes son equivalentes a los obtenidos por parametros, es decir, si hubiera que resolver una ambiguedad se lo debe considerar un parametro (ej: funcion Parámetro).
Ver los siguientes ejemplos:
Ejemplo 1):
Queremos una variable Cantidad llamada igual que un parametro Cantidad.
Sol: Declarar la variable Cantidad y en la formula poner: Parámetro("Cantidad")
Ejemplo 2):
Queremos una variable Cantidad llamada igual que una variable obtenida de un componente y esta tambien se llama Cantidad (recordar que se le puede dar cualquier nombre a la variable cuando se declara la dependencia de componente).
Sol: Declarar la variable Cantidad y en la formula poner: Parámetro("Cantidad")
Ejemplo 3):
Si queremos una variable Cantidad que tenga el valor de un parametro Cantidad y ademas hay una variable obtenida de otro componente que tambien se llama Cantidad.
Sol: Ponerle otro nombre a la variable que se trae del componente, recordar que se le puede dar cualquier nombre a la variable cuando se declara la dependencia de componente, es absurdo que todo se llame igual.