Advertencias » Histórico » Versión 1
Federico Vera, 2018-07-12 17:23
1 | 1 | Federico Vera | # Advertencias |
---|---|---|---|
2 | |||
3 | {{>toc}} |
||
4 | |||
5 | # Encontrando errores |
||
6 | # Nombres de Variables |
||
7 | Deben evitarse nombres de variables y funciones que tengan el mismo nombre que las funciones, constantes u operadores. En la versión actual de `exp4j` esto está permitido (va a cambiar en el futuro). |
||
8 | |||
9 | ¿Por qué es malo? bueno... si tenemos una función incorporada llamada `sin(x)` y creamos una segunda función llamada `sin(x, y)` y además utilizamos una variable llamada `sin` pueden generarse expresiones como: `sin(sin(sin, sin(sin)) + sin)` puede parecer tonto, pero lamentablemente es algo bastante más común de lo que parece. |
||
10 | |||
11 | # Rendimiento |
||
12 | |||
13 | ## Múltiples llamadas a `Expression#evaluate()` |
||
14 | Este es un error muy común. Los valores devueltos por `Expression#evaluate()` no se cachean, por lo tanto cada llamado reevalúa la expresión completa. Hay dos opciones: |
||
15 | 1. Guardar el valores de `Expression#evaluate()` en lugar de llamar a la función una y otra vez. |
||
16 | 1. ¡Implementar un cache de resultados! Ver #752 para más detalles |
||
17 | |||
18 | ## Activar el simplificador para una única evaluación |
||
19 | |||
20 | El simplificador tiene que hacer una ejecución completa para poder realizar su trabajo, por lo tanto no debe utilizarse para una sola evaluación dado que esto crearía una pérdida del 100% en el rendimiento (la expresión debe evaluarse dos veces). |
||
21 | ## Escribir expresiones simplificables |
||
22 | |||
23 | Por ejemplo la expresión `2 + 3x - 1` no es simplificable, porque el `Simplificador` no altera el orden de los operandos (Como los operadores pueden ser sobrecargados no hay una forma fácil de hacer esto). |
||
24 | Si en cambio se cambia `2 + 3x - 1` a `2 - 1 + 3x` será simplificado a `1 + 3x`. |