Proseduurien ja funktioiden käyttäminen

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

Huomautus-kuvake

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.


Huomautus-kuvake

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,...)

Vihje-kuvake

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

    ' (tai virheilmoitus, jos Option Explicit aktivoidaan)

    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