Un módulo de Verse es una unidad atómica de código que puede redistribuirse y de la que se puede depender. Puede evolucionar con el tiempo sin romper dependencias. Un módulo de Verse es una unidad atómica de código que puede redistribuirse y de la que se puede depender; puedes importar un módulo a tu archivo de Verse para utilizar definiciones de código de otros archivos de Verse.
Un módulo de Verse se especifica mediante la carpeta en la jerarquía de archivos del proyecto, y el nombre del módulo es el nombre de la carpeta. Todos los archivos .verse que se encuentren en la misma carpeta que el archivo forman parte del módulo de Verse, y pueden acceder a las definiciones de los demás archivos de Verse en el módulo sin necesidad de importar explícitamente el módulo.
Un módulo se identifica por su ruta; por ejemplo, /Verse.org/Verse. En Verse, la rutas ofrecen un espacio de nombre global para identificar objetos y se basan en la idea de los dominios web. Estas rutas son persistentes, únicas y detectables para cualquier programador de Verse.
Para obtener una lista de los módulos existentes de Verse, consulta la Referencia de la API de Verse.
Miembros de módulo
Aparte de los módulos introducidos por las carpetas en un proyecto, los módulos pueden introducirse dentro de un archivo .verse con la siguiente sintaxis:
module1 := module:
...
Al igual que las clases y las funciones, también se admite la sintaxis de llaves:
module2 := module
{
...
}
Un módulo definido en el archivo de Verse puede incluir todo lo que esté incluido en el nivel superior de un archivo .verse. Esto incluye definiciones de funciones, definiciones de constantes, varias definiciones de tipos, así como otras definiciones de módulos. Por ejemplo:
module := module:
submodule<public> := module:
submodule_class<public> := class {}
module_class<public> := class{}
Se puede hacer referencia al contenido de un módulo mediante un nombre con puntos. Por ejemplo, es posible referirse a class1 fuera de module1 como module1.module2.class1.
Cómo importar definiciones de otros archivos de Verse
Para utilizar el contenido de un módulo de Verse, debes importar el módulo por su ruta. Por ejemplo, el siguiente código importa el módulo Random, identificado por la ruta /Verse.org/Random:
using { /Verse.org/Random }
Cuando el módulo Math se importa en el archivo de Verse, puedes utilizar sus definiciones de código, como la función GetRandomInt().
Otros ejemplos de módulos comunes incluyen los módulos Devices, Simulation y Diagnostics, todos los cuales se importan de manera predeterminada cuando creas un nuevo archivo de Verse por medio de UEFN.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Para importar módulos de otros archivos de Verse, puedes usar una ruta local, como using { /YourVerseFolder/your_module }, o si el archivo está en el mismo directorio, solo using { your_module }.
Si deseas importar módulos anidados, puedes importar los módulos base antes que los módulos de submódulo, o bien utilizar la notación con puntos. Por ejemplo, si tenemos los módulos siguientes:
base_module<public> := module:
submodule<public> := module:
submodule_class := class:
...
Si deseas acceder a los miembros de submodule, puedes importarlo al importar base_module antes que submodule, o al importar base_module.submodule. Ten en cuenta que se producirá un error si submodule se importa antes que base_module.
# Funciona e importa la base y los submódulos
using { base_module }
using { submodule }
# Funciona e importa solo el submódulo
using { base_module.submodule }
# No funciona
using { submodule }
using { base_module }
Cuando creas una subcarpeta en un proyecto de Verse, se crea un módulo para esa carpeta automáticamente. Por ejemplo, si base_module se definió en una carpeta module_folder, module_folder tendría su propio módulo que contiene base_module.
Otra forma de ver esto es que la estructura de archivos module_folder/base_module es la misma que lo siguiente:
module_folder := module:
base_module := module:
submodule := module:
submodule_class := class:
...
Ten en cuenta que tendría que importarse el módulo para module_folder antes que base_module.
# Importa la carpeta que contiene base_module y su submódulo
using { module_folder }
using { base_module }
using { submodule }
Visibilidad de las definiciones en un módulo
La visibilidad de un módulo y su contenido desde otros archivos de Verse se establece mediante especificadores de visibilidad, como public e internal.
De manera predeterminada, la visibilidad de las definiciones es internal; es decir, solo son detectables desde dentro de su propio módulo. Esto también es cierto para los módulos introducidos por carpetas en un proyecto.
Debido a que el especificador de acceso predeterminado es internal, no puedes acceder a los miembros de módulo desde fuera del módulo si no los haces públicos. Por ejemplo:
# Este módulo y sus miembros no son accesibles desde otros archivos de Verse.
private_module := module:
SecretInt:int = 1
...
# Pero este módulo, su submódulo y sus miembros sí lo son.
public_module<public> := module:
public_submodule<public> := module:
PublicInt<public>:int = 1
...
Ten en cuenta que el módulo y sus miembros tienen que estar establecidos en public para poder acceder a ellos en un ámbito distinto.