Translate

martes, 6 de febrero de 2024

Atoms en Erlang


Hay una razón por la cual los nombres de las variables no pueden comenzar en minuscula: los átomos. Los átomos son literales, constantes con su propio nombre para el valor. Lo que ves es lo que obtienes y no esperes más. El átomo gato significa "gato" y listo. No puedes jugar con ello, no puedes cambiarlo, no puedes hacerlo pedazos; es gato. Y listo!

Si bien las palabras individuales que comienzan con una letra minúscula son una forma de escribir un átomo, hay más de una manera de hacerlo:

1> atom.

atom

2> atoms_rule.

atoms_rule

3> atoms_rule@erlang.

atoms_rule@erlang

4> 'Atoms can be cheated!'.

'Atoms can be cheated!'

5> atom = 'atom'.

atom


Un átomo debe estar entre comillas simples (') si no comienza con una letra minúscula o si contiene otros caracteres además de alfanuméricos, guión bajo (_) o @.

La expresión 5 también muestra que un átomo con comillas simples es exactamente igual que un átomo similar sin ellas.

Los átomos  permiten olvidar de los valores subyacentes: por ejemplo los colores de los ojos pueden ser simplemente "azules", "marrones", "verdes" y "otros". No es necesario enumerarlos o que tengan otro valor. Estos colores se pueden usar en cualquier parte de cualquier código: los valores subyacentes nunca chocarán y es imposible que una constante de este tipo no esté definida. Si realmente necesitamos constantes con valores asociados, hay una manera de hacerlo que veremos más adelante.

Por lo tanto, un átomo es principalmente útil para expresar o calificar datos acoplados a él. Usado solo, es un poco más difícil encontrarle un buen uso. Por eso no pasaremos más tiempo jugando con ellos; su mejor uso se producirá cuando se combinen con otros tipos de datos.

Los átomos son realmente agradables y una excelente manera de enviar mensajes o representar constantes. Sin embargo, existen riesgos al usar átomos para demasiadas cosas: se hace referencia a un átomo en una "tabla de átomos" que consume memoria (4 bytes/átomo en un sistema de 32 bits, 8 bytes/átomo en un sistema de 64 bits). La tabla de átomos no se recolecta como basura, por lo que los átomos se acumularán hasta que el sistema se vuelque, ya sea por el uso de la memoria o porque se declararon 1048577 átomos.

Esto significa que los átomos no deberían generarse dinámicamente por ningún motivo; Si su sistema tiene que ser confiable y la entrada del usuario permite que alguien lo bloquee a voluntad diciéndole que cree átomos, está en serios problemas. Los átomos deben verse como herramientas para el desarrollador porque, sinceramente, es lo que son.

Algunos átomos son palabras reservadas y no se pueden usar excepto para lo que los diseñadores del lenguaje querían que fueran: nombres de funciones, operadores, expresiones, etc. Estos son: after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor