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