Sisukord
Register 🔎︎

# Protseduuride ja funktsioonide kasutamine

Järgnev tekst kirjeldab LibreOffice BASICu protseduuride ja funktsioonide kasutamise põhitõdesid.

Uue mooduli loomisel lisab LibreOffice Basic automaatselt SUBi Main. See vaikimisi nimi ei näita LibreOffice Basicu projekti alguspunkti järjekorda. Soovi korral saad selle SUBi ümber nimetada.

Avalike muutujate, protseduuride ja funktsioonide nimede kohta kehtivad mõned piirangud. Neid nimesid ei tohi kasutada sama teegi mõne mooduli nimena.

Protseduurid (SUBid) ja funktsioonid (FUNCTIONid) aitavad säilitada programmist ülevaadet, jagades programmi loogilisteks tükkideks.

Üks kasulik asjaolu protseduuride ja funktsioonide juures on see, et kui sa oled korra kirjutanud programmi koodi, mis sisaldab konkreetseid ülesande komponente, siis saad sama koodi teistes projektides uuesti kasutada.

## Muutujate edastamine protseduuridele (SUB) ja funktsioonidele (FUNCTION)

Muutujad saab edastada nii protseduuridele kui ka funktsioonidele. Parameetrite jaoks tuleb SUBid ja FUNCTIONid deklareerida:

    Sub SubName(Parameter1 As Type, Parameter2 As Type,...)
    Programmi kood
    End Sub

SUB kutsutakse välja järgmise süntaksiga:

    SubName(Value1, Value2,...)

SUBile edastatavad parameetrid peavad sobima SUBi deklareerimisel kasutatutega.

Sama kehtib funktsioonide (FUNCTION) kohta. Lisaks tagastavad funktsioonid alati tulemuse. Funktsiooni tulemus defineeritakse selliselt, et funktsiooni nimele omistatakse tagastusväärtus:

    Function FunctionName(Parameter1 As Type, Parameter2 As Type,...) As Type
    Programmi kood
    FunctionName=Result
    End Function

FUNCTION kustutakse välja järgmise süntaksiga:

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

Protseduuri või funktsiooni väljakutsumiseks võib kasutada ka täispikka nime:
Teek.Moodul.Makro()
Näiteks, et kutsuda välja makro Autotext, mis asub teegis Gimmicks, kasuta järgmist käsku:
Gimmicks.AutoText.Main()

## Muutujate edastamine väärtuse või viida järgi

SUBile või FUNCTIONile saab parameetreid edastada väärtuse või viida kaudu. Kui pole teisiti määratud, siis edastatakse muutuja alati viida kaudu. See tähendab, et SUB või FUNCTION saab parameetri ning võib selle väärtust lugeda ja muuta.

Kui tahad edastada parameetrit väärtuse järgi, siis lisa SUBi või FUNCTIONi väljakutsumisel parameetri ette märksõna "ByVal". Näiteks:

    Result = Function(ByVal Parameter)

Sellisel juhul FUNCTION muutuja originaalsisu ei muuda, kuna ta saab ainult väärtuse, mitte parameetri enda.

## Muutujate skoop

SUBis või FUNCTIONis määratud muutuja kehtib ainult kuni protseduuri sulgemiseni. Seda nimetatakse kohalikuks muutujaks. Paljudel juhtudel on vaja, et muutuja kehtiks kõigis protseduurides, moodulites ja teekides või pärast SUBi või FUNCTIONi sulgemist.

### Muutujate deklareerimine väljaspool SUBi või FUNCTIONit

    GLOBAL VarName As TYPENAME

Muutuja on kehtiv niikaua, kuni kestab LibreOffice'i seanss.

    PUBLIC VarName As TYPENAME

Muutuja kehtib kõigis moodulites.

    PUBLIC VarName As TYPENAME

Muutuja kehtib ainult selles moodulis.

    PUBLIC VarName As TYPENAME

Muutuja kehtib ainult selles moodulis.

### Privaatsete muutujate näide

Jõusta privaatsed muutujad privaatsetena kõigis moodulites, seades CompatibilityMode (tõene).

    ' ***** Module1 *****
    Private myText As String
    Sub initMyText
        myText = "Hello"
        print "in module1 : ", myText
    End Sub

    ' ***** Module2 *****
    'Option Explicit
    Sub demoBug
        CompatibilityMode( true )
        initMyText
        ' Tagastab tühja stringi
        ' (or raises error for Option Explicit)
        print "Now in module2 : ", myText
    End Sub

### Muutuja sisu salvestamine pärast SUB-ist või FUNCTION-ist väljumist

    STATIC VarName As TYPENAME

Muutuja säilitab oma väärtuse kuni FUNCTIONi või SUBi järgmise sisestamiseni. Deklaratsioon peab olema SUBi või FUNCTIONi sees.

## FUNCTION-i tagastusväärtuse tüübi määramine

Funktsiooni tagastusväärtuse tüübi määramiseks lisa nii nagu ka muutujate korral funktsiooni nime järele tüübikirjelduse märk või sisesta parameetrite loendi lõppu As-i määratud tüüp ja vastav võtmesõna, näiteks:

    Function WordCount(WordText As String) As Integer