Proyecto

General

Perfil

Advertencias » Histórico » Versión 2

Federico Vera, 2018-07-17 10:01

1 1 Federico Vera
# Advertencias
2
3
{{>toc}}
4
5
# Encontrando errores
6 2 Federico Vera
7
## Concatenar operadores de comparación
8
9
Este es un error **_muy común_** y brutal. 
10
Imagine la siguiente ecuación: `a < b < c`, ahora hagamos `a = 1`, `b = 3` y `c = 2` lo que se traduciría en `1 < 3 < 2`. Para aquellos no familiarizados en la evaluación de operadores pueden llegar a pensar que el resultado es `falso` (`0.0`) pero en realidad es `verdadero` (`1.0`). ¿Por qué? bueno:
11
```
12
a < b < c -> ((a < b) < c) 
13
```
14
Por lo tanto el ejemplo se convierte en:
15
```
16
1 < 3 < 2 -> ((1 < 3) < 2) -> ((1) < 2) -> 1
17
```
18
Moraleja: **Si no está seguro, NO CONCATENE OPERADORES**
19
20 1 Federico Vera
# Nombres de Variables
21
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). 
22
23
¿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.
24
25
# Rendimiento
26
27
## Múltiples llamadas a `Expression#evaluate()`
28
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:
29
1. Guardar el valores de `Expression#evaluate()` en lugar de llamar a la función una y otra vez.
30
1. ¡Implementar un cache de resultados! Ver #752 para más detalles
31
32
## Activar el simplificador para una única evaluación
33
34
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).
35
## Escribir expresiones simplificables
36
37
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).
38
Si en cambio se cambia `2 + 3x - 1` a `2 - 1 + 3x` será simplificado a `1 + 3x`.
Volver al inicio