Подтвердить что ты не робот

Почему полезно иметь тип атома (например, в эликсире, erlang)?

Согласно http://elixir-lang.org/getting-started/basic-types.html#atoms:

Атомы - это константы, где их имя является их собственным значением. Некоторые другие языки называют эти символы

Интересно, в чем смысл атомарного типа. Возможно, чтобы помочь собрать парсер или макросы? Но в повседневном использовании, как это помогает программисту?

BTW: Никогда не используйте эликсир или erlang, просто отметьте, что он существует (также в kdb)

4b9b3361

Ответ 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

Атомы - это константы с самим собой как ценность. Это очень полезная концепция в распределенных системах, где константы могут быть определены по-разному на каждой системе, а атомы самосогласованы без необходимости определения.