Contenido
Índice 🔎︎

# Uso de procedimientos y funciones

A continuación se describe el uso básico de los procedimientos y las funciones en LibreOffice Basic.

Cuando se crea un módulo nuevo, LibreOffice Basic inserta automáticamente una SUB llamada «Main». Este nombre predeterminado no tiene nada que ver con el orden o el punto de inicio de un proyecto de LibreOffice Basic. Se puede cambiar sin problemas.

Se aplican algunas restricciones para los nombres de sus variables públicas, procedimientos y funciones. No debe utilizar el mismo nombre que uno de los módulos de la misma biblioteca.

Los procedimientos (SUBS) y las funciones (FUNCTIONS) ayudan a mantener un aspecto estructurado al separar un programa en partes lógicas.

Una ventaja de los procedimientos y las funciones es que en cuanto se desarrolla un código de programa que contiene componentes de tarea, este puede usarse en otro proyecto.

## Pase de variables a procedimientos (SUB) y funciones (FUNCTION)

Las variables pueden pasarse a procedimientos y funciones. Cualquier SUB o FUNCTION debe estar declarado para que se le puedan pasar parámetros:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Código del programa
    End Sub

A SUB se le llama mediante la sintaxis siguiente:

    SubName(Value1, Value2,...)

Los parámetros que se pasan a SUB deben coincidir con los especificados en la declaración de SUB.

El mismo proceso se aplica a las funciones. Además las funciones siempre devuelven un resultado. El resultado de la función se define asignando el valor de retorno al nombre de la función

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Código del programa
    NombreFuncion=Resultado
    End Function

A FUNCTION se la llama mediante la sintaxis siguiente:

    Variable=NombreFunción(Parámetro1, Parámetro2,...)

Asimismo, puede utilizar el nombre completo para llamar a un procedimiento o función:
Library.Module.Macro()
Por ejemplo, para llamar a la macro «AutoText» de la biblioteca Gimmicks, utilice la orden siguiente:
Gimmicks.AutoText.Main()

## Pase de variables por valor o por referencia

Los parámetros pueden pasarse a una SUB o una FUNCTION por referencia o por valor. A menos que se especifique de otra forma, los parámetros siempre se pasan por referencia. Esto significa que la SUB o FUNCTION obtienen el parámetro y pueden leer y modificar su valor.

Para pasar un parámetro por valor se inserta la palabra clave "ByVal" delante del parámetro cuando se llama a una SUB o FUNCTION, por ejemplo:

    Resultado = Función(ByVal Parámetro)

En este caso, la función no modificará el contenido original del parámetro ya que solo obtiene el valor y no el parámetro en sí.

## Ámbito de variables

Una variable definida dentro de una SUB o FUNCTION es válida solo hasta el momento en que finaliza el procedimiento. Esto se conoce como variable «local». Sin embargo, en muchos casos necesitará una variable que permanezca válida en todos los procedimientos, en cada uno de los módulos de las bibliotecas, o bien después de que finalice una SUB o FUNCTION.

### Declaración de variables desde fuera de SUB o FUNCTION

    Global NombreVariable As TYPENAME

La variable es válida durante toda la sesión de LibreOffice.

    Public NombreVariable As TYPENAME

La variable es válida en todos los módulos.

    Private NombreVariable As TYPENAME

La variable solo es válida en este módulo.

    Dim NombreVariable As TYPENAME

La variable solo es válida en este módulo.

### Ejemplo para variables privadas

Forza variables privadas permanecer privadas configurando el modulo de compatibilidad como verdadero CompatibilityMode(true).

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        miTexto = "Hola"
        Print "En módulo1 : ", miTexto
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Ahora regresa una cadena vacia
        ' (or raises error for Option Explicit)
        Print "Ahora en módulo2 : ", miTexto
    End Sub

### Guardar elcontenido de las variables después de salir de SUB o FUNCTION

    Static NombreVariable As TYPENAME

La variable conserva su valor hasta la próxima vez que se entre en la FUNCTION o SUB. La declaración debe existir dentro de SUB o FUNCTION.

## Especificar el tipo de valor de retorno de una FUNCTION

Al igual que con las variables, incluya un carácter de declaración de tipo después del nombre de la función o el tipo indicado por "As" y la palabra clave correspondiente al final de la lista de parámetros para definir el tipo del valor de retorno de la función, por ejemplo:

    Function WordCount(WordText As String) As Integer