2012-05-21 9 views
6

Difference between equal to and exactly equal to term comparison operators explica la diferencia, pero una pregunta importante es también: ¿cuál debo usar, cuando no comparo carrozas con otras cosas?cuál de == y =: = debería usar?

"Pragmatic Programming Erlang" recomienda =: = y dice que debe sospechar sobre == y solo usarlo cuando se trata de flotadores. Sin embargo, también dice que una gran cantidad de código existente no sigue esta regla.

Así que tengo un pequeño dilema. ¿Debo usar "==" (incluso cuando no comparando flotadores con otros valores) para mantener la coherencia con el código que lo rodea? ¿Debo usar "=: =" según corresponda, incluso si esto fuera inconsistente con el resto del archivo? ¿Debo convertir las otras expresiones en el archivo para usar "=: ="?

¿Cuáles son las compensaciones? ¿Alguno de los operadores es más eficiente que el otro? Si se garantiza que uno de los operandos no será un número, ¿importa cuál use? ¿No hay trampas ocultas (por ejemplo, wrt. Valores flotantes especiales como NaN, Inf, etc. - en caso de que Erlang los admita).

Por cierto, la base de código que estoy enfrentando es ejabberd.

Respuesta

5

Use =: = si no necesita comparar ints con flotadores. El rendimiento es el mismo (o al menos la diferencia es demasiado pequeña para medir) y NaN, inf etc. no existen en Erlang.

La razón por la que se utilizó una gran cantidad de código de biblioteca OTP == es probablemente porque =: = es una adición bastante reciente a Erlang.

+2

Bueno, =: = se describe en la primera edición (1993) de "Programación simultánea en Erlang", página 30. Si eso es reciente para usted, puede haber estado más tiempo que yo :-) – RichardC

+1

De todos modos, sí , uno debería usar generalmente =: =, porque es la misma prueba de igualdad que se realiza en la coincidencia de patrones. Usar == cuando no se necesita una igualdad aritmética puede introducir errores sutiles, y también puede forzar a Dialyzer a suponer que los datos podrían ser flotantes aunque sepa que solo deberían ser enteros. – RichardC

Cuestiones relacionadas