vida tutorial framework else and syntax erlang elixir

syntax - tutorial - if else elixir



¿Por qué es útil tener un tipo de átomo(como en elixir, erlang)? (3)

Básicamente son cuerdas que pueden ser fácilmente probadas para la igualdad.

Considera una cuerda. Conceptualmente, generalmente queremos pensar que las cadenas son iguales si tienen los mismos contenidos. Por ejemplo, "perro" == "perro" pero "perro"! = "Gato". Sin embargo, para verificar la igualdad de las cadenas, debemos verificar si cada letra en una cadena es igual a la letra en la misma posición en otra cadena, lo que significa que debemos caminar a través de cada elemento de la cadena y verificar cada una de ellas. Personaje por la igualdad. Esto se vuelve un poco más engorroso si se trata de cadenas Unicode y tener que considerar diferentes formas de componer caracteres idénticos (por ejemplo, el carácter é tiene dos representaciones en UTF-8).

Sería mucho más sencillo si almacenáramos cadenas idénticas en la misma ubicación en la memoria. Entonces, verificar la igualdad sería un puntero simple o una comparación de índice.

Como consecuencia de almacenar cadenas idénticas en la misma ubicación en la memoria, también podemos almacenar una copia de cada tipo único de cadena independientemente de la cantidad de veces que se use en el programa, y ​​así ahorrar algo de memoria para las cadenas de uso común.

En un nivel más alto, el uso de átomos también nos permite pensar en cadenas de la misma manera que pensamos en otros tipos de datos primitivos como los enteros.

De acuerdo con http://elixir-lang.org/getting-started/basic-types.html#atoms :

Los átomos son constantes donde su nombre es su propio valor. Algunas otras lenguas llaman a estos símbolos

Me pregunto cuál es el punto de tener un tipo de átomo. Probablemente para ayudar a construir un analizador o para macros? Pero en el uso diario ¿cómo ayuda al programador?

Por cierto: nunca uses elixir o erlang, solo nota que existe (también en kdb)


Creo que uno de los usos más comunes en erlang es etiquetar variables y mensajes, con el beneficio de una comparación rápida (coincidencia de patrón) como dice mipadi.

Por ejemplo, escribe una función que puede fallar según los parámetros proporcionados, el estado de la conexión a un servidor o cualquier motivo. Un uso muy frecuente es devolver una tupla {ok, Value} en caso de éxito, {error, Reason} en caso de error. La función de llamada tendrá la opción de administrar solo la codificación del caso de éxito {ok,Value} = yourModule:yourFunction(Param...) . Al hacer esto, está claro que considera solo el caso de éxito, extrae directamente el valor del retorno de la función, es rápido y no tiene que compartir ningún encabezado con yourModule para descodificar el átomo correcto.

En los mensajes a menudo verá cosas como {add,Key,Value} , {delete,Key} , {delete_all} , {replace,Key,Value} , {append,Key,Value} ... Estos son mensajes explícitos, con Las mismas ventajas mencionadas anteriormente: rápido, sensible, sin compartir el encabezado ...


Los átomos son constantes consigo mismos como valor. Este es un concepto muy útil en sistemas distribuidos, donde las constantes se pueden definir de manera diferente en cada sistema, mientras que los átomos se autocontienen sin necesidad de definición.