Les atomes (en Erlang ou Prolog, etc.) ou des symboles (en Lisp ou Ruby, etc.)—à partir d'ici que les atomes sont très utiles lorsque vous avez une valeur sémantique qui n'est pas naturel sous-jacent "natif" de la représentation. Ils prennent de l'espace de style C énumérations comme ceci:
enum days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
La différence est que les atomes n'avez généralement pas à être déclarés et ils n'ont PAS de représentation sous-jacente à s'inquiéter. L'atome monday
en Erlang ou Prologue a la valeur de "l'atome monday
" et rien de plus ou de moins.
S'il est vrai que vous pourriez obtenir beaucoup de la même utilisation en dehors de la chaîne de types comme vous le feriez à partir des atomes, il y a certains avantages à ce dernier. D'abord, parce que les atomes sont garantis d'être unique (derrière les coulisses de leurs représentations de chaîne sont convertis en une forme de facilement-testé ID) il est beaucoup plus rapide de les comparer entre eux que de comparer l'équivalent des chaînes de caractères. Deuxièmement, ils sont indissociables. L'atome monday
ne peut pas être testé pour voir si elle se termine en day
par exemple. Il est un pur, indivisible unité sémantique. Vous avez moins conceptuel surcharge que vous le feriez dans une représentation de chaîne en d'autres termes.
Vous pouvez également obtenir le même avantage avec style C énumérations. La comparaison de la vitesse en particulier, si quoi que ce soit, plus rapide. Mais... c'est un entier. Et vous pouvez faire des choses bizarres comme l'ont SATURDAY
et SUNDAY
traduire à la même valeur:
enum days { SATURDAY, SUNDAY = 0, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY }
Cela signifie que vous ne pouvez pas faire confiance différents "symboles" (énumérations) à des choses différentes, et fait donc de raisonner sur le code beaucoup plus difficile. Aussi, l'envoi des types énumérés par l'intermédiaire d'un fil de protocole est problématique car il n'y a aucun moyen de distinguer entre eux et régulière des entiers. Les atomes n'ont pas ce problème. Un atome n'est pas un entier et ne sera pas comme dans les coulisses.