NO/Documentation/BASIC Guide/Scope of Variables

From Apache OpenOffice Wiki
Jump to: navigation, search


Det man ser er prosedyrer inne i en modul. Et bibliotek er en samling moduler.

Navngitte data (variabler og navngitte konstanter) er gyldige i den del der de er deklarert.

Data som deklareres inne i en prosedyre kalles lokale. De er gyldige kun inne i prosedyren og "glemmes" etter at den er ferdig, som: Variables that are declared in a function or a procedure are called local variables:

Sub Test
  Dim a As Integer
  Static b As String
  ' ...
End Sub

Hver gang prosedyren startes om igjen, blir variabelen a "nyskapt", som om den aldri var brukt. Variabel b blir derimot husket, fordi den har direktivet Static.

Variabler deklarert innenfor en modul (i "header") med Dim blir public, det vil si at alle moduler innenfor samme biblioteket som X er, vil ha tilgang.

Module skatteBeregning
Dim A As Integer
Sub Test
  Flip
  Flop
End Sub
Sub Flip
 A = A + 1
End Sub
 
Module B:
Sub Flop
  A = A - 1
End Sub

Verdien i variabel A endres ikke av prosedyren Test, men blir inkrementert i Flip og reduseres i Flop (selv om den siste er i en annen modul!).

Vil en sikre seg at en variabel blir public brukes direktivet Public:

Public A As Integer
Global B As String
Private C As Boolean

Variabler som er public er kun gyldige mens en prosedyre eksekverer. De "glemmes" idet siste prosedyre er ferdig. Vil en huske variabler brukes direktivet Global.

Private variabler er kun gyldig inni modulen de er deklarert i. Hvis flere moduler har private med likt navn lages en for hver modul. Under vil modul A og B ha en Private variabel med navn C. Prosedyren Test setter Private variabel i modul A og deretter Private variabel i modul B.

Module A:
Private C As Integer
Sub Test
  SetModuleA      ' setter modul A sin C
  SetModuleB      ' setter modul B sin C
  ShowVarA        ' viser 10
  ShowVarB        ' viser 20
End Sub
Sub SetModuleA
  C = 10
End Sub
Sub ShowVarA
  MsgBox C        ' viser A sin C
End Sub
 
Module B:
Private C As Integer
 Sub SetModuleB
  C = 20
End Sub
Sub ShowVarB
  MsgBox C        ' viser B sin C
End Sub


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools