Contents
Index 🔎︎

# Proseduurien ja funktioiden käyttäminen

Lyhyesti: oheisena kuvataan proseduurien ja funktioiden käyttö LibreOffice Basicissa.

Luotaessa uutta moduulia LibreOffice Basic lisää samalla "Main"-nimisen SUB-rutiinin. Tämä oletusnimi ei ole missään tekemisissä LibreOffice Basic-projektin aloituspisteen kanssa. Tämä SUB-rutiini voidaan myös turvallisesti nimetä uudelleen.

Käyttäjän public-muuttujien, subs-rutiineiden ja funktioiden nimeämiseen liittyy joitakin rajoituksia. Näissä ei tule käyttää saman kirjaston moduulin nimeä.

Proseduurit (SUB-rutiinit) ja funktiot (FUNCTION-rutiinit) helpottavat ohjelmoijaa säilyttämään rakenteellista yleiskuvaa jakamalla ohjelman loogisiin osiin.

Eräs etu proseduureista ja funktioista on se, että kun tehtävän osat sisältävä ohjelmakoodi on kehitetty, samaa koodia voi käyttää toisissa projekteissa.

## Muuttujien välittäminen proseduureihin (SUB) ja funktioihin (FUNCTION)

Muuttujia voidaan välittää sekä proseduureihin että funktioihin. SUB- tai FUNCTION-rutiinin pitää olla määritelty hyväksymään parametrit:

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

SUB-rutiinia kutsutaan seuraavaa syntaksia käyttäen:

    SubName(Value1, Value2,...)

Parametrien, jotka välitetään SUB-rutiiniin, pitää olla yhdenmukaiset SUB-määrityksen parametrien kanssa.

Sama prosessi soveltuu FUNCTION-rutiineihin. Tämän lisäksi funktiot palauttavat aina funktion tuloksen. Funktion tulos määritellään sijoittamalla paluuarvo funktion nimelle:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Ohjelmakoodi
    FunktionNimi=Tulos
    End Function

FUNCTION-kutsulla on seuraavanlainen syntaksi:

    muuttuja=FunktionNimi(parametri1, parametri2,...)

Kutsuttaessa proseduuria tai funktiota voidaan käyttää myös koko rakennenimeä:
kirjasto.moduuli.makro()
Esimerkiksi, kutsuttaessa Autotext-makroa Gimmicks-kirjastosta, käytetään seuraavaa käskyä:
Gimmicks.AutoText.Main()

## Muuttujien välittäminen arvoina tai viitteinä

Parametrit voidaan välittää SUB- ja FUNCTION-rutiineihin joko viitteinä tai arvoina. Ellei toisin ole määritelty, käytetään aina viiteparametreja. Tämä tarkoittaa, että SUB- ja FUNCTION-rutiinit saavat parametrin, jonka arvoa voi sekä lukea että muokata.

Jos halutaan käyttää arvoparametrien välitystä, lisätään avainsana "ByVal" parametrin eteen kutsuttaessa SUB- tai FUNCTION-rutiinia, esimerkiksi:

    Tulos = Function(ByVal Parameteri)

Tässä tapauksessa parametrin alkuperäistä sisältöä ei muuteta FUNCTION-rutiinissa, koska se saa vain parametrin arvon kopion, ei itse parametria.

## Muuttujien näkyvyysalue

Rutiinin SUB tai FUNCTION sisällä määritelty muuttuja säilyy vain proseduurin päättymiseen asti. Sitä kutsutaan "lokaaliksi" muuttujaksi. Usein on tarvetta muuttujalle, joka on käytettävissä kaikissa proseduureissa, kaikissa eri kirjastojen moduuleissa tai sen jälkeen, kun SUB- tai FUNCTION-aliohjelmasta on poistuttu.

### Muuttujien määrittely SUB- ja FUNCTION-rutiinien ulkopuolella

    GLOBAL glMuuttuja As TIETOTYYPPI

Muuttuja on käytettävissä niin kauan kuin LibreOffice istunto kestää.

    PUBLIC puMuuttuja As TIETOTYYPPI

Muuttuja on käytettävissä kaikissa moduuleissa

    PUBLIC puMuuttuja As TIETOTYYPPI

Muuttuja on käyttökelpoinen vain määrittelymoduulissaan.

    DIM Muuttuja As TIETOTYYPPI

Muuttuja on käyttökelpoinen vain määrittelymoduulissaan.

### Esimerkki Private-muuttujista

Pakotetaan private-muuttuja olemaan yksityinen moduulien välillä asettamalla CompatibilityMode(true).

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        myText = "Heipä"
        print "Module1:ssä myText : ", myText
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Nyt tulostuukin tyhjä merkkijono
        ' (or raises error for Option Explicit)
        print "Nyt Module2:ssa myText : ", myText
    End Sub

### Muuttujan sisällön tallentaminen SUB- ja FUNCTION-rutiinista poistuttaessa

    STATIC Muuttuja As TIETOTYYPPI

Muuttuja säilyttää arvonsa seuraavaan FUNCTION- tai SUB-rutiinin kutsuun. Määritelmän täytyy olla FUNCTION- tai SUB-rutiinin sisällä.

## FUNCTION-rutiinin paluuarvon tyypinmääritys

Kuten muuttujien, niin funktioidenkin nimeen voi liittää tyypinmääritysmerkin. Funktion palautusarvon tietotyyppi voidaan määrittää myös "As"-määresanalla yhdessä tietotyypin määrittävän avainsanan kanssa parametrilistan jälkeen, esimerkiksi:

    Function WordCount(WordText As String) As Integer