Mòdul
Contingut
Índex 🔎︎

# Ús de procediments i de funcions

A continuació es descriu l'ús bàsic de procediments i funcions al LibreOffice Basic.

Quan creeu un mòdul nou, el LibreOffice Basic insereix automàticament una SUB denominada "Main". Aquest nom per defecte no té res a veure amb l'ordre ni amb el punt d'inici d'un projecte del LibreOffice Basic. Podeu canviar el nom d'aquesta SUB amb seguretat.

S'apliquen certes restriccions per als noms de les variables, subs i funcions públiques. No podeu utilitzar el mateix nom que un mòdul de la mateixa biblioteca.

Els procediments (SUBS) i les funcions (FUNCTIONS) us ajuden a mantenir una visió general estructurada separant un programa en parts lògiques.

Un avantatge dels procediments i de les funcions és que, un cop heu desenvolupat un codi de programa que conté components de tasca, podeu utilitzar aquest codi en un altre projecte.

## Pas de variables a procediments (SUB) i funcions (FUNCTION)

Les variables es poden passar tant a procediments com a funcions. La SUB o FUNCTION s'ha de declarar perquè esperi els paràmetres:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)

    Codi de programa

    End Sub

La SUB es crida mitjançant la sintaxi següent:

    SubName(Value1, Value2,...)

Els paràmetres passats a una SUB han d'ajustar-se als especificats a la declaració de SUB.

El mateix procés és aplicable a FUNCTIONS. A més, les funcions sempre retornen un resultat de funció. El resultat d'una funció es defineix assignant el valor de retorn al nom de la funció:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type

    Codi de programa

    FunctionName=Result

    End Function

La FUNCTION es crida mitjançant la sintaxi següent:

    Variable=FunctionName(Parameter1, Parameter2,...)

També podeu utilitzar el nom complet per cridar un procediment o una funció:
Biblioteca.Mòdul.Macro()
Per exemple, per a cridar la macro Autotext des de la biblioteca Gimmicks, utilitzeu l'ordre següent:
Gimmicks.AutoText.Main()

## Pas de variables per valor o referència

Els paràmetres es poden passar a una SUB o a una FUNCTION per referència o per valor. A menys que s'indiqui el contrari, un paràmetre sempre es passa per referència. Això significa que una SUB o una FUNCTION obté el paràmetre i pot llegir-ne i modificar-ne el valor.

Si voleu passar un paràmetre per valor, inseriu la paraula clau "ByVal" davant del paràmetre quan crideu una SUB o FUNCTION, per exemple:

    Resultat = Funció(ByVal Paràmetre)

En aquest cas, el contingut original del paràmetre no es modificarà amb la FUNCTION perquè només obté el valor i no el mateix paràmetre.

## Àmbit de variables

Una variable definida entre una SUB o FUNCTION, només serà vàlida fins que no se surti del procediment. Això es coneix com a variable "local". En molts casos, necessiteu que una variable sigui vàlida en tots els procediments, en tots els mòduls de totes les biblioteques, o després de sortir d'una SUB o FUNCTION.

### Declaració de variables fora d'una SUB o FUNCTION

    Global VarName As TYPENAME

La variable és vàlida mentre duri la sessió del LibreOffice.

    Public VarName As TYPENAME

La variable és vàlida a tots els mòduls.

    Private VarName As TYPENAME

La variable només és vàlida en aquest mòdul.

    Dim VarName As TYPENAME

La variable només és vàlida en aquest mòdul.

### Exemple de variables privades

Forceu que les variables privades siguin privades entre mòduls establint CompatibilityMode(true).

    ' ***** Module1 *****

    Private myText As String

    Sub initMyText

        myText = "Hola"

        Print "al mòdul1 : ", myText

    End Sub

    ' ***** Module2 *****

    'Option Explicit

    Sub demoBug

        CompatibilityMode( true )

        initMyText

        ' Torna una cadena buida

        ' (o genera un error per a Option Explicit)

        Print "Ara al mòdul2 : ", myText

    End Sub

### Com desar el contingut d'una variable després de sortir d'una SUB o FUNCTION

    Static VarName As TYPENAME

La variable manté el seu valor fins a la propera vegada que s'introdueix la FUNCTION o la SUB. La declaració ha d'existir a dins d'una SUB o FUNCIÓ.

## Especificació del tipus de valor de retorn d'una FUNCTION

Igual que amb les variables, heu d'incloure el caràcter de declaració de tipus després del nom de la funció, o el tipus indicat per "As" i la paraula clau corresponent al final de la llista de paràmetres per definir el tipus de valor de retorn de la funció, per exemple:

    Function WordCount(WordText As String) As Integer