Почему полезно иметь тип атома (например, в эликсире, erlang)?
Согласно http://elixir-lang.org/getting-started/basic-types.html#atoms:
Атомы - это константы, где их имя является их собственным значением. Некоторые другие языки называют эти символы
Интересно, в чем смысл атомарного типа. Возможно, чтобы помочь собрать парсер или макросы? Но в повседневном использовании, как это помогает программисту?
BTW: Никогда не используйте эликсир или erlang, просто отметьте, что он существует (также в kdb)
Ответы
Ответ 1
Я думаю, что одним из наиболее распространенных в erlang-приложений является тег переменных и сообщений, с выгодой для быстрого сравнения (совпадение с шаблоном), как говорит mipadi.
Например, вы пишете функцию, которая может выйти из строя в зависимости от предоставленных параметров, состояния подключения к серверу или по любой причине. Очень частое использование заключается в возврате кортежа {ok, Value} в случае успеха, {error, Reason} в случае ошибки. Вызывающая функция будет иметь возможность управлять только кодированием кода успеха {ok,Value} = yourModule:yourFunction(Param...)
. При этом ясно, что вы рассматриваете только случай успеха, вы извлекаете непосредственно значение из функции return, это быстро, и вам не нужно делиться каким-либо заголовком с вашим модулем для декодирования ok атома.
В сообщениях вы часто увидите такие вещи, как {add,Key,Value}
, {delete,Key}
, {delete_all}
, {replace,Key,Value}
, {append,Key,Value}
... Это явные сообщения с теми же преимуществами, что были упомянуты ранее: быстрые, нет доли заголовка...
Ответ 2
Это в основном строки, которые можно легко проверить на равенство.
Рассмотрим строку. Понятно, что мы вообще хотим думать, что строки равны, если они имеют одинаковое содержимое. Например, "собака" == "собака" , но "собака"!= "Кошка". Однако, чтобы проверить равенство строк, мы должны проверить, равна ли каждая буква в одной строке букве в том же положении в другой строке, что означает, что нам нужно пройти через каждый элемент строки и проверить каждую символ для равенства. Это становится немного более громоздким, если вы имеете дело с строками Unicode и должны учитывать разные способы составления одинаковых символов (например, символ é имеет два представления в UTF-8).
Было бы намного проще, если бы мы сохранили идентичные строки в одном и том же месте в памяти. Тогда проверка равенства будет простым указателем или индексированием.
В результате хранения одинаковых строк в одном и том же месте в памяти мы также можем хранить одну копию каждого уникального типа строки независимо от того, сколько раз она используется в программе, тем самым сохраняя некоторую память для часто используемых строк также.
На более высоком уровне использование атомов также позволяет нам думать о строках так же, как мы думаем о других примитивных типах данных, таких как целые числа.
Ответ 3
Атомы - это константы с самим собой как ценность.
Это очень полезная концепция в распределенных системах, где константы могут быть определены по-разному на каждой системе, а атомы самосогласованы без необходимости определения.