Erlang - Módulos
Los módulos son un grupo de funciones reagrupadas en un solo archivo, con un solo nombre. Además, todas las funciones en Erlang deben definirse en módulos.
La mayor parte de las funciones básicas como los operadores aritméticos, lógicos y booleanos ya están disponibles porque los módulos predeterminados se cargan cuando se ejecuta un programa. Todas las demás funciones definidas en un módulo que utilizará deben llamarse con el formularioModule:Function (Argumentos).
Definición de un módulo
Con un módulo, puede declarar dos tipos de cosas: funciones y atributos. Los atributos son metadatos que describen el módulo en sí, como su nombre, las funciones que deberían ser visibles para el mundo exterior, el autor del código, etc. Este tipo de metadatos es útil porque le da pistas al compilador sobre cómo debe hacer su trabajo, y también porque permite a las personas recuperar información útil del código compilado sin tener que consultar la fuente.
La sintaxis de una declaración de función es la siguiente:
Sintaxis
-module(modulename)
Dónde, modulenamees el nombre del módulo. Esta debe ser la primera línea del código del módulo.
El siguiente programa muestra un ejemplo de un módulo llamado helloworld.
Ejemplo
-module(helloworld).
-export([start/0]).
start() ->
io:fwrite("Hello World").
La salida del programa anterior es:
Salida
Hello World
Atributos del módulo
Un atributo de módulo define una determinada propiedad de un módulo. Un atributo de módulo consta de una etiqueta y un valor.
La sintaxis general de un atributo es:
Sintaxis
-Tag(Value)
Un ejemplo de cómo se puede utilizar el atributo se muestra en el siguiente programa:
Ejemplo
-module(helloworld).
-author("TutorialPoint").
-version("1.0").
-export([start/0]).
start() ->
io:fwrite("Hello World").
El programa anterior define 2 atributos personalizados llamados autor y versión que contienen el autor del programa y el número de versión del programa, respectivamente.
La salida del programa anterior es:
Salida
Hello World
Atributos prediseñados
Erlang tiene algunos atributos prediseñados que se pueden adjuntar a los módulos. Echemos un vistazo a ellos.
Exportar
El atributo de exportaciones tomará una lista de funciones y arity para exportar para el consumo de otros módulos. Definirá la interfaz del módulo. Ya hemos visto esto en todos nuestros ejemplos anteriores.
Sintaxis
export([FunctionName1/FunctionArity1,.,FunctionNameN/FunctionArityN])
Dónde,
FunctionName - Este es el nombre de la función en el programa.
FunctionArity - Este es el número de parámetros asociados con la función.
Ejemplo
-module(helloworld).
-author("TutorialPoint").
-version("1.0").
-export([start/0]).
start() ->
io:fwrite("Hello World").
La salida del programa anterior será:
Salida
Hello World
Importar
El atributo de importación se usa para importar funciones de otro módulo para usarlo como local.
Sintaxis
-import (modulename , [functionname/parameter]).
Dónde,
Modulename - Este es el nombre del módulo que debe importarse.
functionname/parameter - la función en el módulo que debe importarse.
Ejemplo
-module(helloworld).
-import(io,[fwrite/1]).
-export([start/0]).
start() ->
fwrite("Hello, world!\n").
En el código anterior, estamos usando la palabra clave import para importar la biblioteca 'io' y específicamente la función fwrite. Entonces, ahora cada vez que invocamos la función fwrite, no tenemos que mencionar el nombre del módulo io en todas partes.
La salida del programa anterior será:
Salida
Hello, world!