NO/Documentation/BASIC Guide/Scope of Variables
< {{#switch:Previous Page | Previous Section = Previous Section | Next Section = Next Section | Previous Page = Previous Page | Next Page = Next Page | }} | {{#switch:Next Page | Previous Section = Previous Section | Next Section = Next Section | Previous Page = Previous Page | Next Page = Next Page | }} > |
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). |