Contenido

# Uso de procedimientos, funciones y propiedades

A continuación se describe el uso básico de los procedimientos, las funciones y las propiedades de LibreOffice BASIC.

Cuando 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 arranque de un proyecto de LibreOffice BASIC. Además, es seguro cambiar el nombre de esta Subrutina.

Se aplican algunas restricciones a los nombres de sus variables públicas, subrutinas, funciones y propiedades. No debe emplear el mismo nombre que otro de los módulos de la misma biblioteca.

Los procedimientos (Subrutinas), funciones (Function) y propiedades (Property) le ayudan a mantener una descripción general estructurada al separar un programa en partes lógicas. Estas piezas se pueden reutilizar fácilmente para realizar tareas similares en otros proyectos.

## Pasar variables a procedimientos, funciones o propiedades

Se pueden pasar variables tanto a procedimientos como a funciones o propiedades. Se debe declarar qué parámetros espera la Sub, Function o Property:

      Sub SubName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...)
          ' su código va aquí
      End Sub

Se llama a la Sub mediante la sintaxis siguiente:

      [Call] SubName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

Los parámetros pasados a una Sub deben ajustarse a los especificados en la declaración de la Sub.

El mismo proceso se aplica a una Function. Además, las funciones siempre devuelven un resultado. Este resultado se define asignando el valor que devuelve al nombre de la función:

      Function FunctionName(Parameter1 As TYPENAME, Parameter2 As TYPENAME,...) As TYPENAME
          ' su código va aquí
          FunctionName=Result
      End Function

Se llama a la Function mediante la sintaxis siguiente:

      Variable = FunctionName( [Parameter1:=]Value1, [Parameter2:=]Value2, ...)

Las propiedades combinan la sintaxis de procedimientos y funciones. Una Property normalmente requiere al menos un parámetro.

      Private _IsApproved As TYPENAME
      Property Get IsApproved As TYPENAME
          ' su código va aquí
          IsApproved = some_computation
      End Property
      Property Let IsApproved(value As TYPENAME)
          ' su código va aquí
          _IsApproved = computed_value
      End Property

Se llama a la Property mediante la sintaxis siguiente:

      var = IsApproved
      IsApproved = some_value

También puede utilizar el nombre completo para llamar a un procedimiento, función o propiedad:
[Call] Library.Module.Macro(), donde Call es facultativo.
Por ejemplo, para llamar a la macro Autotext desde la biblioteca Gimmicks, use la orden siguiente:
Gimmicks.AutoText.Main()

## Pasar variables por valor o por referencia

Los parámetros se pueden pasar a un procedimiento, una función o una propiedad ya sea por referencia o por valor. A menos que se especifique lo contrario, un parámetro siempre se pasa por referencia. Eso significa que una Sub, una Function o una Property obtienen el parámetro y pueden leer y modificar su valor.

Si desea pasar un parámetro por valor, inserte la palabra clave ByVal delante del parámetro cuando llame a una Sub, una Function o una Property, por ejemplo:

      Function ReadOnlyParms(ByVal p2, ByVal p2)
          ' su código va aquí
      End Function
      result = ReadOnlyParms(parm1, parm2)

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í.

## Definir parámetros opcionales

Es posible definir funciones, procedimientos o propiedades con parámetros opcionales; por ejemplo:

      Sub Rounding(number, Optional decimals, Optional format)
          ' su código va aquí
      End Sub

## Argumentos posicionales o de palabra clave

Al llamar a una función o subrutina, puede pasar sus argumentos por posición o por nombre. El paso por posición consiste simplemente en enumerar los argumentos en el orden en que están definidos los parámetros en la función o subrutina. El paso por nombre requiere anteponer al argumento el nombre del parámetro correspondiente, seguido de dos puntos y un signo de igualdad (:=). Los argumentos de palabra clave pueden aparecer en cualquier orden. Consulte la función Replace() de BASIC para ver ejemplos de este tipo.

Cuando necesite pasar menos parámetros, utilice argumentos de palabras clave. Pasar valores para menos parámetros por posición requiere proporcionar valores para todos los parámetros anteriores a ellos, opcionales o no. Esto asegura que los valores estén en las posiciones correctas. Si pasa los parámetros por nombre (usando argumentos de palabras clave) puede omitir los demás argumentos intermedios.

## Ámbito de variables

Una variable definida dentro de una Sub, una Function o una Property, solo permanece válida hasta que se sale del procedimiento. Esto se conoce como variable "local". En muchos casos, necesita que una variable sea válida en todos los procedimientos, en cada módulo de todas las bibliotecas o después de salir de una Sub, una Function o una Property.

### Declarar variables fuera de una Sub una Function o una Property

    Global VarName As TYPENAME

La variable es válida mientras dure la sesión de LibreOffice.

    Public VarName As TYPENAME

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

    Private VarName As TYPENAME

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

    Dim VarName As TYPENAME

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

### Ejemplo para variables privadas

Fuerce que las variables privadas lo sean en todos los módulos estableciendo 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 devuelve una cadena vacía
          ' (o produce un error con Option Explicit)
          Print "Ahora en módulo2 : ", miTexto
      End Sub

### Guardar el contenido de una variable luego de salir de una Sub, una Function o una Property

      Static VarName As TYPENAME

La variable conserva su valor hasta la próxima vez que se utiliza en una Function, Sub o una Property. La declaración debe existir dentro de una Sub, una Function o una Property.

## Especificar el tipo de valor de retorno de una Function o una Property

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 el tipo de datos correspondiente al final de la lista de parámetros para definir el tipo de valor de retorno de la función o propiedad, por ejemplo:

      Function WordCount(WordText As String) As Integer

Temas relacionados

Función CompatibilityMode()

Instrucción Option Explicit

Palabra clave opcional

Instrucción Property

Instrucción Static

¡Necesitamos su ayuda!