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
' (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